Download Disk Basic Unravelled II
Transcript
APPENDIX C DISASSEMBLY OF DISK BASIC 1.0 DISK BASIC UNRAVELLED II 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 D473 39 ORIGIN:SPECTRAL ASSOC REVISED:12/26/1999 WALTER K ZYDHEK RTS D474 D476 D478 D47A D47C D47E D480 D483 D485 D486 D489 D48B D48C D48E D490 D493 D495 D497 D49A D49D D49F D4A1 D4A4 D4A6 D4A8 8D 8D 8D 9E 34 8D BD 34 5F 8E 6F 5A 26 35 CE 8D 35 BD CE 8D C6 8E 9F D7 7E C3 E7 BC 52 10 DF B6 54 14 D4AB D4AF D4B2 D4B4 D4B6 D4B8 D4BB D4BD D4C1 D4C4 D4C6 D4C9 D4CB D4CD D4CE D4D0 D4D1 10 BD C6 9D 27 BD C1 10 BD 34 8E C6 6F 5A 26 4F 20 27 D1 04 A5 0C B7 11 24 A5 04 07 12 82 D4D3 D4D5 D4D6 D4D8 D4DA D4DC D4DE D4E0 D4E1 D4E3 D4E5 D4E7 D4E9 D4EC D4EE D4F2 D4F5 D4F8 D4FC D4FF D501 D503 D506 D509 D50B D50E D511 D515 D517 D519 D51B D51D D520 D522 D525 D527 D52A D52C D52E D531 D533 D536 D538 D53C D53E D541 D544 EB 5C C0 24 CB 6D 26 4C A7 81 25 32 8E 9C 10 BD 73 10 BD 86 97 BD 7F 86 B7 BD 10 0F 20 81 25 B6 8A B7 86 B7 1E 1E BD 26 BD 8D 10 1A 8E BF 8E E4 06 00 80 FB 14 06 96 10 B6 06 8C 03 06 EE EA D5 80 59 00 00 FF D1 70 69 38 DF 89 C7 12 FB 0D 12 FC 12 85 F5 85 12 EC 61 22 27 22 CA 09 CE 95 00 EA D5 09 C0 FF D6 26 EC 1A 16 08 09 10 FF 53 FF 88 88 D6 68 D6 6C 8E 50 D5 09 09 0F D7 52 3B 5C 08 00 AC FF 85 48 DE 00 86 86 40 48 DE FD FF 4B 62 83 89 * DSKO$ COMMAND DSKO BSR LD439 BSR LD45F BSR LD436 LDX FPA0+2 PSHS X BSR LD45F JSR LB654 PSHS X,B CLRB LDX #DBUF0 LD489 CLR ,X+ DECB BNE LD489 PULS B,X LDU #DBUF0+128 BSR LD42B PULS X JSR LB659 LDU #DBUF0 BSR LD42B LDB #$03 LD4A1 LDX #DBUF0 STX DCBPT STB DCOPC JMP LD5FF GET THE DRIVE, TRACK AND SECTOR NUMBERS GET THE DESCRIPTOR OF STRING 1 'TM' ERROR IF NUMERIC EXPRESSION * GET STRING 1 DESCRIPTOR ADDRESS * AND SAVE IT ON THE STACK GET THE DESCRIPTOR OF STRING 2 *GET LENGTH AND ADDRESS OF STRING 2 AND *SAVE THEM ON THE STACK SET CLEAR COUNTER TO 256 (FULL SECTOR BUFFER) USE DBUF0 AS THE DSKO$ I/O BUFFER CLEAR A BYTE IN I/O BUFFER DECREMENT CLEAR COUNTER BRANCH IF ALL 256 BYTES NOT CLEARED GET THE LENGTH AND ADDRESS OF STRING 2 POINT X TO STRING 2 DESTINATION MOVE STRING 2 DATA INTO DBUF0 POINT X TO STRING 1 DESCRIPTOR GET THE LENGTH AND ADDRESS OF STRING 1 POINT U TO STRING 1 DESTINATION MOVE STRING 1 DATA INTO DBUF0 DSKCON WRITE OP CODE POINT X TO I/O BUFFER (DBUF0) * * SAVE NEW DSKCON BUFFER POINTER AND OP CODE VARIABLES GO WRITE OUT A SECTOR * DSKINI COMMAND DSKINI LBEQ LA61F JSR LD169 LDB #$04 JSR GETCCH BEQ LD4C4 JSR LB738 CMPB #17 LBHS LB44A JSR LA5C7 LD4C4 PSHS B LDX #DBUF1+SECMAX LDB #SECMAX LD4CB CLR ,-X DECB BNE LD4CB CLRA BRA LD4E0 BRANCH TO 'DN' ERROR IF NO DRIVE NUMBER SPECIFIED CALCULATE DRIVE NUMBER SKIP FACTOR DEFAULT VALUE GET CURRENT INPUT CHAR FROM BASiC BRANCH IF END OF LINE SYNTAX CHECK FOR COMMA AND EVALUATE EXPRESSION MAX VALUE OF SKIP FACTOR = 16 'ILLEGAL FUNCTION CALL' IF BAD SKIP FACTOR SYNTAX ERROR IF MORE CHARACTERS ON THE LINE SAVE SKIP FACTOR ON THE STACK POINT TO END OF LOGICAL SECTOR NUMBER STORAGE AREA 18 SECTORS PER TRACK CLEAR A BYTE IN THE BUFFER CLEARED ALL 18? KEEP GOING IF NOT RESET PHYSICAL SECTOR COUNTER START WITH FIRST PHYSICAL SECTOR = 1 * CALCULATE LOGICAL SECTOR NUMBERS LD4D3 ADDB ,S LD4D5 INCB LD4D6 SUBB #SECMAX BHS LD4D6 ADDB #SECMAX TST B,X BNE LD4D5 LD4E0 INCA STA B,X CMPA #SECMAX BLO LD4D3 LEAS $01,S LDX #DFLBUF+$1888-2 CMPX MEMSIZ LBHI LAC44 JSR DVEC7 COM DRESFL LDS #DBUF1+SECLEN JSR L95AC LDA #$00 STA DCOPC JSR LD5FF CLR RDYTMR LDA #$C0 STA FDCREG JSR LD6DE LBNE LD59B CLR DCTRK BRA LD533 LD519 CMPA #22 BLO LD525 LDA DRGRAM ORA #$10 STA DSKREG LD525 LDA #$53 STA FDCREG EXG A,A EXG A,A JSR LD6DE BNE LD59B LD533 JSR LD6FD BSR $D5A4 LDY #FDCREG+3 ORCC #$50 LDX #LD562 STX DNMISV LDX #DFLBUF ADD SKIP FACTOR TO LOGICAL SECTOR COUNTER ADD ONE TO LOGICAL SECTOR COUNTER SUBTRACT MAX NUMBER OF SECTORS BRANCH UNTIL 0 > ACCB >= -18 ADD 18, NOW ACCB IS 0-17 IS ANYTHING STORED HERE ALREADY? YES - GET ANOTHER SECTOR * INCREMENT PHYSICAL SECTOR NUMBER AND * SAVE IT IN THE RAM BUFFER FINISHED WITH ALL SECTORS? NO - KEEP GOING REMOVE SKIP FACTOR FROM STACK GET TOP OF RAM USED BY DSKINI IS IT > CLEARED AREA? 'OUT OF MEMORY' ERROR IF > CLEARED AREA CLOSE ALL FILES SET RESET FLAG TO $FF - THIS WILL CAUSE A DOS RESET SET STACK TO TOP OF DBUF1 RESET SAM TO DISPLAY PAGE ZERO AND ALPHA GRAPHICS YOU COULD DELETE THIS INSTRUCTION AND CHANGE FOLLOWING STA TO CLR RESTORE HEAD TO TRACK ZERO DSKCON OP CODE RESTORE HEAD TO TRACK ZERO RESET THE READY TIMER * FOC READ ADDRESS CODE * CHECK DRIVE READY - WAIT UNTIL READY BRANCH IF NOT READY - ISSUE AN ERROR RESET TRACK NUMBER START THE FORMATTING PROCESS = CHECK FOR TRACK 22 (PRECOMPENSATION) = AND BRANCH IF < TRACK 22 - NO PRECOMP * GET THE RAM IMAGE OF DSKREG, 'OR' * IN THE PRECOMPENSATION FLAG AND * SEND IT TO DSKREG = GET STEP IN COMMAND = AND SEND IT TO THE 1793 * DELAY AFTER ISSUING COMMAND TO 1793 * CHECK DRIVE READY BRANCH IF NOT READY - ISSUE AN ERROR WAIT A WHILE BUILD A FORMATTED TRACK IN RAM Y POINTS TO 1793 DATA REGISTER DISABLE INTERRUPTS * GET RETURN ADDRESS AND STORE * IT IN THE NON MASKABLE INTERRUPT VECTOR POINT X TO THE FORMATTED TRACK RAM IMAGE C30