; ; ; ;* * * DEFINE I/O PORTS ON KONAN SMC-200 DISK CONTROLLER * * * ; ; ; 0090 = BUSDRA EQU 90H;OUTPUT PORT (BUS DRIVERS - BUSDRA CONTROLS ;THE BUS & SELECT LINES TO THE DISK DRIVE ;(BITS 0,1 = BITS 8,9 OF THE BUS DATA, BIT ;4 = DRIVE ADDRESS AND BIT 7 = POWER SAVE)) ; 0091 = BUSDRB EQU 91H;OUTPUT PORT (BUS DRIVERS - BUSDRB CONTROLS ;THE BUS DATA LINES TO THE DISK DRIVE (BITS ;0 - 7 = BUS DATA 0 - 7)) ; 0092 = CMDREG EQU 92H;OUTPUT PORT (COMMAND REGISTER - USED TO IN- ;ITIATE THE FOLLOWING: DMA AND DISK TRANSFERS, ;DISK SELECTION, HEAD SELECTION, SEEKS, AND ;RECOVERY OPERATIONS) ; ;BITS - 0 = DISK WRITE, 1 = DMA WRITE, 2 = DMA READ, 3 = ;DISK READ, 4 = SELECT UNIT, 5 = SET CYLINDER, 6 = SET HEAD, ;7 = FAULT RECOVERY ; 0093 = SECADP EQU 93H;OUTPUT PORT (SECTOR ADDRESS - SELECTS THE SECTOR ;TO BE USED FOR THE NEXT READ OR WRITE OPERATION (BITS - 0 = ;LSB AND 7 = MSB)) ; 0094 = SECBFP EQU 94H;INPUT/OUTPUT PORT (SECTOR BUFFER - ALLOWS SOFTWARE ;TO READ AND WRITE THE SECTOR BUFFER (1K OF RAM ;LOGICALLY PLACED BETWEEN THE DISK AND USER'S ;MEMORY. SIZE = BYTES OF USER MEMORY + HEADER BYTES.)) ; 0097 = STATPT EQU 97H;INPUT/OUTPUT PORT (STATUS - ALLOWS DONE, READY AND ;ERROR STATUS TO BE READ. WRITING TO THIS I/O PORT ;RESETS THE SECTOR BUFFER ADDRESS) ; ;BITS - 0 = SELECTED, 1 = SEEK ERROR, 2 = CHECKSUM ERROR, 3 = BUSY ;OR PROTECTED, 4 = ON CYLINDER, 5 = DISK FAULT, 6 = DISK READY, ;7 = DONE ; ; ; * * * DEFINE SMC-200 LEGAL COMMANDS * * * ; 0000 = RESETS EQU 0H;(RESETS DONE AND INTERRUPT, NO DATA SET-UP REQUIRED) ; 0001 = DSKWRT EQU 1H;(WRITES THE CONTENTS OF THE SECTOR BUFFER TO THE DISK) ; ;THE DATA IS WRITTEN ON THE CURRENTLY SELECTED DRIVE, HEAD AND TRACK ;AT THE SECTOR SELECTED BY THE SECTOR ADDRESS REGISTER ; 0008 = DSKRD EQU 8H;(READS A SECTOR FROM THE DISK INTO THE SECTOR BUFFER) ; ;THE SECTOR READ IS DEFINED BY THE SECTOR REGISTER AND IS TAKEN FROM ;THE CURRENTLY SELECTED DRIVE, HEAD, AND TRACK ; 0010 = SELUNT EQU 10H;(THIS COMMAND CAUSES THE SELECT TAG LINE TO BE STROBED)) ; ;PRIOR TO ISSUING THIS COMMAND THE ADDRESS OF THE DRIVE TO BE SELECTED ;IS SET INTO THE BUSDRA REGISTER ; 0020 = SETCYL EQU 20H;(CAUSES THE SELECTED DRIVE TO SEEK TO THE CYLINDER ;SELECTED BY BUS 0 - 9 LINES (SET BY BUSDRA AND BUSDRB)) ; 0040 = SETHD EQU 40H;(SELECTS THE DISK HEAD IDENTIFIED BY THE BUS LINES ;(SET BY OUT BUSDRB)) ; 0080 = FLTCLR EQU 80H;(PERFORMS THE FAULT CLEAR FUNCTION IDENTIFIED BY ;THE BUS LINES) ; 0088 = FLTREC EQU 88H;(READS A SECTOR FROM THE DISK (SAME AS 08H) WITH ;ERROR RECOVERY FUNCTIONS SELECTED BY OUT BUSDRA AND ;BUSDRB) ; 0204 = SBUFSZ EQU 204H;204 HEX = 516 DEC (512 BYTES FOR SECTOR + 4 HEADER BYTES ; 0001 = SELECT EQU 01H;SELECT TEST BIT 0002 = SEEKER EQU 02H;SEEK ERROR TEST BIT 0004 = CHKSUM EQU 04H;CHECKSUM ERROR TEST BIT 0008 = BSYWRP EQU 08H;BUSY OR WRITE PROTECTED TEST BIT 0010 = ONCYL EQU 10H;ON-CYLINDER TEST BIT 0020 = DSKFLT EQU 20H;DISK FAULT TEST BIT 0040 = DSKRDY EQU 40H;DISK READY TEST BIT 0080 = DONE EQU 80H;DONE TEST BIT ; ; ; D000 ORG 0D000H ; D000 C30000 JMP 0000H;JUMP TO CPM ; ;FORMAL PARAMETERS (USER LANGUAGE - INTERFACE) ; D003 00 SUNIT: DB 00H D004 00 SCYL: DB 00H;MSB OF TRACK ADDRESS D005 00 DB 00H;LSB OF TRACK ADDRESS D006 00 ECYL: DB 00H;MSB OF TRACK ADDRESS D007 00 DB 00H;LSB OF TRACK ADDRESS D008 00 SHD: DB 00H D009 00 EHD: DB 00H D00A 00 SSECT: DB 00H D00B 00 ESECT: DB 00H D00C 00 SDATA: DB 00H D00D 00 DB 00H D00E 00 DB 00H D00F 00 DB 00H D010 00 DB 00H D011 00 XCYL: DB 00H;MSB OF TRACK ADDRESS D012 00 DB 00H;LSB OF TRACK ADDRESS D013 00 XHD: DB 00H D014 00 XSECT: DB 00H D015 00 XDATA: DB 00H D016 00 DB 00H D017 00 DB 00H D018 00 DB 00H D019 00 DB 00H D01A 00 XPRGCNT:DB 00H;SCRATCH - MSB MISC. COUNTER D01B 00 DB 00H;SCRATCH - LSB MISC. COUNTER D01C 00 PRGCMD: DB 00H;PROGRAM COMMAND D01D 00 PRGMOD: DB 00H;MISC. PROGRAM MODIFIERS D01E 00 DATMOD: DB 00H;MISC. DATA MODIFIERS D01F 00 PRGCNT: DB 00H;MSB MISC. COUNTER D020 00 DB 00H;LSB MISC. COUNTER D021 00 CBIAS : DB 00H;MSB - COUNTER BIAS D022 00 DB 00H;LSB - COUNTER BIAS D023 00 CSTATS: DB 00H;CONTROLLER STATUS D024 00 PSTATS: DB 00H;PROGRAM STATUS D025 OSBUFF: DS SBUFSZ;OUTPUT SECTOR BUFFER D229 ISBUFF: DS SBUFSZ;INPUT SECTOR BUFFER D025 = HDR1 EQU OSBUFF D026 = HDR2 EQU OSBUFF + 1 D027 = HDR3 EQU OSBUFF + 2 D028 = HDR4 EQU OSBUFF + 3 ; ; ; INITI: D42D 3E00 MVI A,00H;CLEAR A REG D42F 3223D0 STA CSTATS;CLEAR CONTROLLER STATUS (LAST) D432 3224D0 STA PSTATS;CLEAR PROGRAM STATUS (LAST) D435 3A04D0 LDA SCYL;INIT STARTING CYLINDER (MSB) D438 3211D0 STA XCYL D43B 3A05D0 LDA SCYL + 1;INIT START CYLINDER (LSB)+ 1 D43E 3212D0 STA XCYL + 1 D441 3A08D0 LDA SHD;INIT STARTING HD D444 3213D0 STA XHD D447 3A0AD0 LDA SSECT;INIT STARTING SECTOR D44A 3214D0 STA XSECT D44D 3A0CD0 LDA SDATA;INIT STARTING DATA D450 3215D0 STA XDATA D453 3A1FD0 LDA PRGCNT;INIT. MSB MISC. COUNTER D456 321AD0 STA XPRGCNT D459 3A20D0 LDA PRGCNT + 1;INIT. LSB MISC. COUNTER D45C 321BD0 STA XPRGCNT + 1 D45F C362D4 JMP GETCMD ; GETCMD: D462 3A1CD0 LDA PRGCMD D465 FE01 CPI 01H;1 = READ COMMAND D467 CA07D7 JZ RDCMD;IF PRGCMD = 1 THEN DO A READ D46A FE02 CPI 02H;2 = WRITE COMMAND D46C CAF2D6 JZ WRCMD;IF PRGCMD = 2 THEN DO A WRITE D46F FE03 CPI 03H;3 = DO OSCILLATING SEEKS D471 CA91D7 JZ OSCSEK;IF PRGCMD = 3 DO SEEKS D474 FE04 CPI 04H;4 = FORMAT D476 CACDD7 JZ FORMAT;IF PRGCMD = 4 DO FORMAT D479 FE05 CPI 05H;5 = VERIFY FORMAT D47B CA06D8 JZ VERIFY;IF PRGCMD = 5 DO VERIFY THE FORMAT D47E FE06 CPI 06H;6 = WRITE - READ - COMPARE (DONT CHK HDR BEFORE WRITE) D480 CA1CD7 JZ WRRDCP;IF PRGCMD = 6 DO WRITE - READ - COMPARE D483 3E06 MVI A,06H;6 = BAD COMMAND D485 3224D0 STA PSTATS D488 C38BD4 JMP BBASIC;BACK TO BASIC ON BAD COMMAND ; BBASIC: D48B C9 RET;RETURN BACK TO BASIC ; SELEC: D48C 3A03D0 LDA SUNIT D48F D390 OUT BUSDRA D491 3E10 MVI A,SELUNT D493 D392 OUT CMDREG D495 DB97 IN STATPT D497 E601 ANI SELECT D499 CAA0D4 JZ SELERR D49C AF XRA A D49D D392 OUT CMDREG;RESET DONE + INTERRUPT D49F C9 RET ; SELERR: D4A0 3E01 MVI A,01H;SELECT SEQ = 1 D4A2 3224D0 STA PSTATS D4A5 DB97 IN STATPT D4A7 3223D0 STA CSTATS D4AA 33 INX SP D4AB 33 INX SP D4AC C38BD4 JMP BBASIC;BACK TO BASIC ; SELHD: D4AF 3A13D0 LDA XHD D4B2 D391 OUT BUSDRB D4B4 3227D0 STA HDR3 D4B7 3E40 MVI A,SETHD D4B9 D392 OUT CMDREG D4BB C9 RET ; SELCYL: D4BC 3A11D0 LDA XCYL;MSB OF TRACK ADDRESS D4BF D390 OUT BUSDRA D4C1 3225D0 STA HDR1 D4C4 3A12D0 LDA XCYL + 1;LSB OF TRACK ADDRESS D4C7 D391 OUT BUSDRB D4C9 3226D0 STA HDR2 D4CC 3E20 MVI A,SETCYL D4CE D392 OUT CMDREG D4D0 DB97 WAITC: IN STATPT D4D2 E680 ANI DONE D4D4 CAD0D4 JZ WAITC D4D7 E602 ANI SEEKER D4D9 C8 RZ D4DA 3E02 MVI A,02H;SEEK SEQ = 2 D4DC 3224D0 STA PSTATS D4DF DB97 IN STATPT D4E1 3223D0 STA CSTATS D4E4 33 INX SP D4E5 33 INX SP D4E6 C38BD4 JMP BBASIC ; SETSEC: D4E9 3A14D0 LDA XSECT D4EC D393 OUT SECADP D4EE 3228D0 STA HDR4 D4F1 C9 RET ; GDSTWR: D4F2 DB97 IN STATPT D4F4 E651 ANI 51H;STATUS BITS - RDY,ONCYL,SEL D4F6 FE51 CPI 51H;CHECK FOR RDY,ONCYL,SEL D4F8 CA0AD5 JZ BDSTWR;GO CHECK FOR ANY BAD STATUS BITS D4FB 3E03 MVI A,03H;WRITE SEQ = 3 D4FD 3224D0 STA PSTATS D500 DB97 IN STATPT D502 3223D0 STA CSTATS D505 33 INX SP D506 33 INX SP D507 C38BD4 JMP BBASIC;BACK TO BASIC ON ERROR ; BDSTWR: D50A DB97 IN STATPT;CHECK FOR BAD STATUS D50C E62A ANI 2AH;STATUS BITS - FLT,PROTECTED,SEEK ERR D50E CA20D5 JZ WRDISK;EVERY THING OK - DO WRITE D511 3E04 MVI A,04H;WRITE SEQ = 4 D513 3224D0 STA PSTATS D516 DB97 IN STATPT D518 3223D0 STA CSTATS D51B 33 INX SP D51C 33 INX SP D51D C38BD4 JMP BBASIC;BACK TO BASIC ON ERROR ; D520 D397 WRDISK: OUT STATPT;CLEAR SECTOR BUFFER ADDRESS D522 AF XRA A;CLEAR THE BUS D523 D390 OUT BUSDRA D525 D391 OUT BUSDRB D527 3E01 MVI A,DSKWRT D529 D392 OUT CMDREG D52B DB97 WAITB: IN STATPT;WAIT FOR DONE D52D E680 ANI DONE D52F CA2BD5 JZ WAITB GSTAWR: D532 DB97 IN STATPT D534 E651 ANI 51H;STATUS BITS - RDY,ONCYL,SEL D536 FE51 CPI 51H;CHECK FOR GOOD STATUS D538 CA4AD5 JZ BSTAWR;JUMP IF GOOD D53B 3E07 MVI A,07H;WRITE SEQ = 7 D53D 3224D0 STA PSTATS D540 DB97 IN STATPT D542 3223D0 STA CSTATS D545 33 INX SP D546 33 INX SP D547 C38BD4 JMP BBASIC;BACK TO BASIC ON ERROR ; BSTAWR: D54A DB97 IN STATPT;CHECK FOR BAD STATUSES D54C E62A ANI 2AH;STATUS BITS - FLT,PROTECTED,SEEK ERR D54E C8 RZ;RETURN BACK TO MAIN PROGRAM - OK D54F 3E08 MVI A,08H D551 3224D0 STA PSTATS D554 DB97 IN STATPT D556 3223D0 STA CSTATS D559 33 INX SP D55A 33 INX SP D55B C38BD4 JMP BBASIC;BACK TO BASIC ON ERROR ; GDSTRD: D55E DB97 IN STATPT D560 E651 ANI 51H;STATUS BITS - RDY,ONCYL,SEL D562 FE51 CPI 51H;CHECK FOR GOOD STATUS D564 CA76D5 JZ BDSTRD D567 3E09 MVI A,09H D569 3224D0 STA PSTATS D56C DB97 IN STATPT D56E 3223D0 STA CSTATS D571 33 INX SP D572 33 INX SP D573 C38BD4 JMP BBASIC;BACK TO BASIC ON ERROR ; BDSTRD: D576 DB97 IN STATPT;CHECK FOR ANY BAD STATUS BITS D578 E622 ANI 22H;STATUS BITS - FLT,SEEK ERR D57A CA8ED5 JZ RDDISK;EVERY THING OK,DO READ D57D 3E0A MVI A,0AH;READ SEQ = A D57F 2124D0 LXI H,PSTATS D582 77 MOV M,A D583 DB97 IN STATPT D585 2123D0 LXI H,CSTATS D588 77 MOV M,A D589 33 INX SP D58A 33 INX SP D58B C38BD4 JMP BBASIC;BACK TO BASIC ON ERROR ; RDDISK: D58E AF XRA A;RESET A REG D58F D390 OUT BUSDRA D591 D391 OUT BUSDRB D593 D397 OUT STATPT;ZERO SECTOR ADDRESS D595 3E08 MVI A,DSKRD D597 D392 OUT CMDREG D599 DB97 WAITA: IN STATPT;WAIT FOR DONE D59B E680 ANI DONE D59D CA99D5 JZ WAITA GSTARD: D5A0 DB97 IN STATPT;CHECK FOR GOOD STATUSES D5A2 E651 ANI 51H;STATUS BITS - RDY,ONCYL,SEL D5A4 FE51 CPI 51H;CHECK FOR GOOD STATUS D5A6 CAB8D5 JZ BSTARD;OK - GO LOOK FOR BAD STATUSES D5A9 3E0B MVI A,0BH;READ SEQ = B D5AB 3224D0 STA PSTATS D5AE DB97 IN STATPT D5B0 3223D0 STA CSTATS D5B3 33 INX SP D5B4 33 INX SP D5B5 C38BD4 JMP BBASIC;BACK TO BASIC ON ERROR ; BSTARD: D5B8 DB97 IN STATPT;CHECK FOR BAD STATUS BITS D5BA E626 ANI 26H;STATUS BITS - FLT,CHKSUM ERR,SEEK ERR D5BC C8 RZ;RETURN BACK TO MAIN PROGRAM,ALL IS GOOD D5BD 3E0C MVI A,0CH;READ SEQ = C D5BF 3224D0 STA PSTATS D5C2 DB97 IN STATPT D5C4 3223D0 STA CSTATS D5C7 33 INX SP D5C8 33 INX SP D5C9 C38BD4 JMP BBASIC;BACK TO BASIC ON ERROR ; LDSECB: D5CC D397 OUT STATPT;RESET SECTOR BUFFER ADDRESS D5CE 2125D0 LXI H,OSBUFF D5D1 7E MOV A,M D5D2 D394 OUT SECBFP;HDR1 D5D4 23 INX H D5D5 7E MOV A,M D5D6 D394 OUT SECBFP;HDR2 D5D8 23 INX H D5D9 7E MOV A,M D5DA D394 OUT SECBFP;HDR3 D5DC 23 INX H D5DD 7E MOV A,M D5DE D394 OUT SECBFP;HDR4 D5E0 110002 LXI D,SBUFSZ - 4 D5E3 2115D0 LXI H,XDATA D5E6 7E MOV A,M D5E7 2129D0 LXI H,OSBUFF + 4;SKIP HEADER BYTES D5EA 77 LOOPA: MOV M,A D5EB D394 OUT SECBFP D5ED 23 INX H D5EE 1D DCR E D5EF C2EAD5 JNZ LOOPA D5F2 15 DCR D D5F3 C2EAD5 JNZ LOOPA D5F6 C9 RET ; UNLDSB: D5F7 D397 OUT STATPT;ZERO SECTOR BUFFER ADDRESS D5F9 110402 LXI D,SBUFSZ D5FC 14 INR D D5FD 2129D2 LXI H,ISBUFF D600 DB94 LOOPB: IN SECBFP D602 77 MOV M,A D603 23 INX H D604 1D DCR E D605 C200D6 JNZ LOOPB D608 15 DCR D D609 C200D6 JNZ LOOPB D60C C9 RET ; ;COMPARE SECTOR BUFFERS COMPSB: D60D 010402 LXI B,SBUFSZ;CONTROL COUNTER D610 04 INR B D611 2129D2 LXI H,ISBUFF D614 1125D0 LXI D,OSBUFF D617 1A LOOPC: LDAX D D618 BE CMP M D619 C227D6 JNZ CMPERR;COMPARE ERROR D61C 13 INX D D61D 23 INX H D61E 0D DCR C D61F C217D6 JNZ LOOPC D622 05 DCR B D623 C217D6 JNZ LOOPC D626 C9 RET ; CMPERR: D627 3E05 MVI A,05;COMPARE ERROR STATUS SET TO 5 D629 3224D0 STA PSTATS D62C 33 INX SP D62D 33 INX SP D62E C38BD4 JMP BBASIC;BACK TO BASIC ON ERROR ; LDADDO: D631 D397 OUT STATPT;RESET SECTOR BUFFER ADDRESS D633 2125D0 LXI H,OSBUFF D636 7E MOV A,M D637 D394 OUT SECBFP;HDR1 D639 23 INX H D63A 7E MOV A,M D63B D394 OUT SECBFP;HDR2 D63D 23 INX H D63E 7E MOV A,M D63F D394 OUT SECBFP;HDR3 D641 23 INX H D642 7E MOV A,M D643 D394 OUT SECBFP;HDR4 D645 C9 RET ; ULDADO: D646 D397 OUT STATPT;RESET SECTOR BUFFER ADDRESS D648 2129D2 LXI H,ISBUFF D64B DB94 IN SECBFP;HDR1 D64D 77 MOV M,A D64E DB94 IN SECBFP;HDR2 D650 23 INX H D651 77 MOV M,A D652 DB94 IN SECBFP;HDR3 D654 23 INX H D655 77 MOV M,A D656 DB94 IN SECBFP;HDR4 D658 23 INX H D659 77 MOV M,A D65A C9 RET ; ;COMPARE HEADERS (4) ONLY (ADDRESS) CPADDO: D65B 0E04 MVI C,04H D65D 2129D2 LXI H,ISBUFF D660 1125D0 LXI D,OSBUFF D663 1A HDRCMP: LDAX D D664 BE CMP M D665 C227D6 JNZ CMPERR;COMPARE ERROR D668 13 INX D D669 23 INX H D66A 0D DCR C D66B C263D6 JNZ HDRCMP D66E C9 RET ; INCHD: D66F 3A09D0 LDA EHD D672 2113D0 LXI H,XHD D675 56 MOV D,M D676 BA CMP D D677 C8 RZ D678 14 INR D D679 72 MOV M,D D67A C9 RET ; INCYL: D67B 3A06D0 LDA ECYL D67E 2111D0 LXI H,XCYL D681 56 MOV D,M D682 23 INX H D683 5E MOV E,M D684 BA CMP D D685 CA8DD6 JZ LSCCHK;JMP IF = AND CHK THE LSB D688 13 DOINCC: INX D D689 73 MOV M,E D68A 2B DCX H D68B 72 MOV M,D D68C C9 RET D68D 3A07D0 LSCCHK: LDA ECYL + 1 D690 BB CMP E D691 C288D6 JNZ DOINCC D694 C9 RET ; INSECT: D695 3A0BD0 LDA ESECT D698 2114D0 LXI H,XSECT D69B 56 MOV D,M D69C BA CMP D D69D C8 RZ D69E 14 INR D D69F 72 MOV M,D D6A0 C9 RET ; SWAPS: D6A1 3A04D0 LDA SCYL;MSB D6A4 3211D0 STA XCYL;MSB D6A7 3A05D0 LDA SCYL + 1;LSB D6AA 3212D0 STA XCYL + 1;LSB D6AD 3A08D0 LDA SHD D6B0 3213D0 STA XHD D6B3 3A0AD0 LDA SSECT D6B6 3214D0 STA XSECT D6B9 C9 RET ; D6BA 3A06D0 SWAPE: LDA ECYL;MSB D6BD 3211D0 STA XCYL;MSB D6C0 3A07D0 LDA ECYL + 1;LSB D6C3 3212D0 STA XCYL + 1;LSB D6C6 3A09D0 LDA EHD D6C9 3213D0 STA XHD D6CC 3A0BD0 LDA ESECT D6CF 3214D0 STA XSECT D6D2 C9 RET ; ;RE-INITILIZE CYL,HD,SEC,DATA REINIT: D6D3 3A04D0 LDA SCYL;INIT STARTING CYLINDER (MSB) D6D6 3211D0 STA XCYL D6D9 3A05D0 LDA SCYL + 1;INIT START CYLINDER (LSB) D6DC 3212D0 STA XCYL + 1 D6DF 3A08D0 LDA SHD;INIT STARTING HD D6E2 3213D0 STA XHD D6E5 3A0AD0 LDA SSECT;INIT STARTING SECTOR D6E8 3214D0 STA XSECT D6EB 3A0CD0 LDA SDATA;INIT STARTING DATA D6EE 3215D0 STA XDATA D6F1 C9 RET ; ; * * * MAIN ROUTINES * * * ; WRCMD: D6F2 CD8CD4 CALL SELEC D6F5 CDAFD4 CALL SELHD D6F8 CDBCD4 CALL SELCYL D6FB CDE9D4 CALL SETSEC D6FE CDCCD5 CALL LDSECB D701 CDF2D4 CALL GDSTWR D704 C38BD4 JMP BBASIC;BACK TO BASIC WHEN DONE ; RDCMD: D707 CD8CD4 CALL SELEC D70A CDAFD4 CALL SELHD D70D CDBCD4 CALL SELCYL D710 CDE9D4 CALL SETSEC D713 CD5ED5 CALL GDSTRD D716 CDF7D5 CALL UNLDSB D719 C38BD4 JMP BBASIC;BACK TO BASIC WHEN DONE ; WRRDCP: D71C CD8CD4 WRITE: CALL SELEC D71F CDAFD4 CALL SELHD D722 CDBCD4 CALL SELCYL D725 CDE9D4 CONTC: CALL SETSEC D728 CDCCD5 CALL LDSECB D72B CDF2D4 CALL GDSTWR D72E CD95D6 CALL INSECT D731 C225D7 JNZ CONTC D734 3A0AD0 LDA SSECT;RESET SECTOR, NEXT HEAD D737 3214D0 STA XSECT D73A CD6FD6 CALL INCHD D73D C21CD7 JNZ WRITE D740 3A0AD0 LDA SSECT;RESET SECTOR, NEXT CYL D743 3214D0 STA XSECT D746 3A08D0 LDA SHD;RESET HEAD, NEXT CYL D749 3213D0 STA XHD D74C CD7BD6 CALL INCYL D74F C21CD7 JNZ WRITE ; ;RE-INITILIZE STARTING CYL,HD,SEC,DATA (READ VERIFY) D752 CDD3D6 CALL REINIT ; D755 CD8CD4 READ: CALL SELEC D758 CDAFD4 CALL SELHD D75B CDBCD4 CALL SELCYL D75E CDE9D4 CONTD: CALL SETSEC D761 CD5ED5 CALL GDSTRD D764 CDF7D5 CALL UNLDSB D767 CD0DD6 CALL COMPSB D76A CD95D6 CALL INSECT D76D C25ED7 JNZ CONTD D770 3A0AD0 LDA SSECT;RESET SECTOR, NEXT HEAD D773 3214D0 STA XSECT D776 CD6FD6 CALL INCHD D779 C255D7 JNZ READ D77C 3A0AD0 LDA SSECT;RESET SECTOR, NEXT CYL D77F 3214D0 STA XSECT D782 3A08D0 LDA SHD;RESET HEAD, NEXT CYL D785 3213D0 STA XHD D788 CD7BD6 CALL INCYL D78B C255D7 JNZ READ D78E C38BD4 JMP BBASIC;BACK TO BASIC WHEN DONE ; OSCSEK: D791 CDB7D7 CALL DOITOS D794 3A1BD0 LDA XPRGCNT + 1;LSB OF MISC. COUNTER D797 3D DCR A D798 321BD0 STA XPRGCNT + 1;LSB D79B CA8BD4 JZ BBASIC;BACK TO BASIC WHEN DONE D79E CDBAD6 CALL SWAPE;EXCHANGE STARTING HEADER WITH ENDING HEADER D7A1 CDB7D7 CALL DOITOS D7A4 3A1BD0 LDA XPRGCNT + 1;LSB D7A7 3D DCR A D7A8 321BD0 STA XPRGCNT + 1;LSB D7AB CA8BD4 JZ BBASIC;BACK TO BASIC WHEN DONE D7AE CDA1D6 CALL SWAPS;EXCHANGE ENDING HEADER WITH STARTING HEADER D7B1 CDB7D7 CALL DOITOS D7B4 C391D7 JMP OSCSEK D7B7 CD8CD4 DOITOS: CALL SELEC D7BA CDAFD4 CALL SELHD D7BD CDBCD4 CALL SELCYL D7C0 CDE9D4 CALL SETSEC D7C3 CD5ED5 CALL GDSTRD D7C6 CD46D6 CALL ULDADO D7C9 CD5BD6 CALL CPADDO D7CC C9 RET ; ;FORMAT FORMAT: D7CD CD8CD4 FORMWT: CALL SELEC D7D0 CDAFD4 CALL SELHD D7D3 CDBCD4 CALL SELCYL D7D6 CDE9D4 CONTA: CALL SETSEC D7D9 CD31D6 CALL LDADDO D7DC CDF2D4 CALL GDSTWR D7DF CD95D6 CALL INSECT D7E2 C2D6D7 JNZ CONTA D7E5 3A0AD0 LDA SSECT;RESET SECTOR, NEXT HEAD D7E8 3214D0 STA XSECT D7EB CD6FD6 CALL INCHD D7EE C2CDD7 JNZ FORMWT D7F1 3A0AD0 LDA SSECT;RESET SECTOR, NEXT CYL D7F4 3214D0 STA XSECT D7F7 3A08D0 LDA SHD;RESET HEAD, NEXT CYL D7FA 3213D0 STA XHD D7FD CD7BD6 CALL INCYL D800 C2CDD7 JNZ FORMWT D803 C38BD4 JMP BBASIC;BACK TO BASIC WHEN DONE ; ;VERIFY FORMAT VERIFY: D806 CD8CD4 CALL SELEC D809 CDAFD4 CALL SELHD D80C CDBCD4 CALL SELCYL D80F CDE9D4 CONTB: CALL SETSEC D812 CD31D6 CALL LDADDO D815 CD5ED5 CALL GDSTRD D818 CD46D6 CALL ULDADO D81B CD5BD6 CALL CPADDO D81E CD95D6 CALL INSECT D821 C20FD8 JNZ CONTB D824 3A0AD0 LDA SSECT;RESET SECTOR, NEXT HEAD D827 3214D0 STA XSECT D82A CD6FD6 CALL INCHD D82D C206D8 JNZ VERIFY D830 3A0AD0 LDA SSECT;RESET SECTOR, NEXT CYL D833 3214D0 STA XSECT D836 3A08D0 LDA SHD;RESET HEAD, NEXT CYL D839 3213D0 STA XHD D83C CD7BD6 CALL INCYL D83F C206D8 JNZ VERIFY D842 C38BD4 JMP BBASIC;BACK TO BASIC WHEN DONE ;