BDOS EQU 00005H TABUL EQU 0C200H BGBAS EQU 64 ;Zacatek BASICu START: LD SP,0900H RSYFI: LD DE,FCB LD C,0FH ;OTEVRI SOUBOR CALL BDOS INC A JR NZ,RSYF2 LD DE,TX15 RSYF1: LD C,9 CALL BDOS JP 0 RSYF2: LD DE,TX12 LD C,09H CALL BDOS LD HL,01000H LD (DMA),HL RCYKL: LD DE,(DMA) LD C,01AH ;NASTAV DMA CALL BDOS LD DE,FCB LD C,014H ;SEKVENCNI CTENI CALL BDOS OR A JR NZ,RCYKL2 LD DE,080H LD HL,(DMA) ADD HL,DE LD (DMA),HL JR RCYKL RCYKL2: XOR A OUT (0DCH),A LD E,01AH ;CLS LD C,2 CALL BDOS START1: LD C,009H LD DE,TEXT1 CALL BDOS LD C,009H LD DE,TEXT2 CALL BDOS LD C,009H LD DE,TEXT3 CALL BDOS LD C,009H LD DE,TEXT4 CALL BDOS MECHAN: LD C,001H CALL BDOS CP 00DH ;CR JP Z,KONEC RES 5,A ;MALA/VELKA PISMENA ADD A,0BFH CP 004H JR NC,MECHAN LD (DISK),A LD C,002H LD E,03AH CALL BDOS LD C,009H LD DE,TEXT5 CALL BDOS KEY?: LD C,006H LD E,0FFH CALL BDOS AND A JR Z,KEY? LD C,009H LD DE,TEXT6 CALL BDOS CALL FORMAT LD C,009H LD DE,TEXT7 CALL BDOS CALL VERIFY LD C,09H LD DE,TEXT11 CALL BDOS CALL PRSTO CALL DIREC CALL SYSTE LD C,009H LD DE,TEXT8 CALL BDOS XOR A START3: OUT (0DCH),A JP START1 LOERR: LD DE,TX14 LD C,9 CALL BDOS JR START3 SEERR: LD DE,TX16 LD C,9 CALL BDOS JR START3 INERR: LD DE,TX13 LD C,9 CALL BDOS JR START3 ERR: LD DE,TX11 LD C,9 CALL BDOS JR START3 KONEC: JP 0 ;************************************************************** FORMAT: LD A,0AH ;10 POKUSU LD (POKUS),A CALL MOTON LD BC,0 LD DE,0001H ;0.STOPA,1.SECTOR DI FORMA1: LD A,D PUSH DE PUSH HL PUSH BC CALL PISSTO POP BC POP HL POP DE CALL TIME LD A,D CPL OUT (0DBH),A CALL SEEK JR NZ,DALPO FORMA2: CALL VSTRAN PUSH BC PUSH DE PUSH HL CALL FORSTO POP HL POP DE POP BC JR NZ,DALPO INC B LD A,B RRCA JR NC,FORMA3 LD C,1 JR FORMA2 FORMA3: INC D ;DALSI STOPA LD C,0 LD A,D CP 80 ;80 STOP JR NZ,FORMA1 EI RET DALPO: LD A,(POKUS) DEC A LD (POKUS),A JP Z,SEERR CALL RESTOR JR FORMA1 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FORSTO: LD HL,TABUL PUSH HL CALL TABFOR POP HL LD E,01BH ;27x256 BYTE LD BC,00DBH ;256 BYTE,PORT DB LD D,02H ;BIT 2=1 DEFB 03EH ;LD A, FORPRI: DEFB 0F4H ;PRIKAZ FORMATUJ STOPU CALL BUSY FORST1: IN A,(0D8H) AND 03H CP D JR Z,FORST1 OUTI JR NZ,FORST1 DEC E JR NZ,FORST1 IN A,(0D8H) CPL CP 040H JP Z,ERR AND 0C5H ;1100 0101 RET Z JP ERR ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VERIFY: LD A,0AH ;10 POKUSU LD (POKUS),A CALL MOTON LD BC,0 LD DE,0001H ;0.STOPA,1.SECTOR DI VERIF1: LD A,D PUSH DE PUSH HL PUSH BC CALL PISSTO POP BC POP HL POP DE CALL TIME LD A,D CPL OUT (0DBH),A CALL SEEK JR NZ,VALPO VERIF2: CALL VSTRAN PUSH BC PUSH DE PUSH HL CALL VERSTO POP HL POP DE POP BC INC B LD A,B RRCA JR NC,VERIF3 LD C,1 JR VERIF2 VERIF3: INC D ;DALSI STOPA LD C,0 LD A,D CP 040H ;64 STOP JR NZ,VERIF1 EI RET VALPO: LD A,(POKUS) DEC A LD (POKUS),A JP Z,SEERR CALL RESTOR JR VERIF1 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VERSTO: LD HL,TABUL LD A,01H LD (SEKTOR),A CPL OUT (0DAH),A LD A,D CPL OUT (0D9H),A LD BC,00DBH ;256 BYTE,PORT DB DEFB 03EH ;LD A, VERPRI: DEFB 098H ;PRIKAZ CTI SEKTOR CALL BUSY VERST1: IN A,(0D8H) RRCA JP C,LOERR RRCA JR C,VERST1 INI JR NZ,VERST1 LD A,(SEKTOR) INC A LD (SEKTOR),A CP 011H JR NZ,VERST1 VERST2: LD A,0D8H JP FDCOPE ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PRSTO: CALL CISTI LD A,04H LD (POKUS),A PRSTO1: CALL MOTON LD HL,ASYST LD DE,TABUL LD BC,0036H LDIR LD HL,BSYST LD DE,TABUL+0F00H LD BC,0020H LDIR LD A,0FFH OUT (0DBH),A CALL SEEK JR NZ,PRSTO2 LD C,01H ; LICHASTRANA CALL VSTRAN LD HL,TABUL CALL WRSEC JR C,PRSTO2 RET PRSTO2: LD A,(POKUS) DEC A LD (POKUS),A JR NZ,PRSTO1 JP ERR ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DIREC: CALL CISTI LD A,04H LD (POKUS),A DIREC1: CALL MOTON LD HL,TABUL LD A,080H LD (HL),A INC HL LD A,01H LD (HL),A INC HL LD B,012H ;18 x XOR A CALL PREPIS LD A,035H LD (HL),A INC HL LD B,09H XOR A CALL PREPIS LD A,094H LD (HL),A INC HL LD A,01H LD (HL),A LD A,0FFH ;STOPA 0 OUT (0DBH),A CALL SEEK JR NZ,DIREC2 LD A,0FFH OUT (0D9H),A LD C,00H ; SUDA STRANA CALL VSTRAN LD HL,TABUL CALL WRSEC JR C,DIREC2 RET DIREC2: LD A,(POKUS) DEC A LD (POKUS),A JR NZ,DIREC1 JP ERR ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SYSTE: LD A,03H LD (POKUS),A SYSTE6: CALL MOTON LD A,BGBAS LD (STOPA),A CPL OUT (0DBH),A CALL SEEK JR NZ,SYSTE7 LD HL,1000H LD A,01H LD (SIDE),A CALL VSTRA1 SYSTE1: CALL WRSEC JR C,SYSTE7 LD A,(SIDE) INC A LD (SIDE),A CALL VSTRA1 CALL WRSEC JR C,SYSTE7 LD A,(SIDE) INC A LD (SIDE),A CALL VSTRA1 LD A,(STOPA) INC A CP BGBAS+7 JR Z,SYSTE5 LD (STOPA),A CPL OUT (0DBH),A CALL SEEK JR NZ,SYSTE7 JR SYSTE1 SYSTE5: LD A,0D8H CALL FDCOPE EI RET SYSTE7: LD A,(POKUS) DEC A LD (POKUS),A JR NZ,SYSTE6 JP ERR ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ WRSEC: LD BC,00DBH DI LD A,01H LD (SEKTOR),A CPL OUT (0DAH),A DEFB 03EH ;LD A, WRPRI: DEFB 0BCH ;PRIKAZ PIS SEKTORY CALL BUSY WRSEC1: IN A,(0D8H) RRCA JP C,WRERR RRCA JR C,WRSEC1 OUTI JR NZ,WRSEC1 LD A,(SEKTOR) INC A CP 011H JR Z,WRSEC2 LD (SEKTOR),A JR WRSEC1 WRSEC2: LD A,0D0H CALL FDCOPE EI RET WRERR: SCF RET ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CISTI: LD HL,TABUL LD (HL),0 LD DE,TABUL+1 LD BC,01100H LDIR RET ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VSTRAN: LD A,C VSTRA1: PUSH AF AND 01H RLCA OR 098H LD (VERPRI),A AND 02H OR 0BCH LD (WRPRI),A AND 02H OR 0F4H LD (FORPRI),A POP AF RET ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TABFOR: LD A,D CPL LD D,A ;STOPA LD A,C CPL LD C,A ;STRANA LD A,E CPL LD E,A ;SECTOR LD A,0B1H ;4E-NEG LD B,020H ;POCET CALL PREPIS TABFO1: LD A,0FFH ;0 LD B,0CH CALL PREPIS LD A,0AH LD B,03H CALL PREPIS LD A,01H ;FE-ADRESOVA ZNACKA LD (HL),A INC HL LD (HL),D ;STOPA INC HL LD (HL),C ;STRANA INC HL LD (HL),E ;SECTOR INC HL DEC E ;ZVYS SECTOR LD A,0FEH ;01-TO JE DELKA 256 LD (HL),A INC HL LD A,08H ;F7-VYTVOR CRC LD (HL),A INC HL LD A,0B1H LD B,016H CALL PREPIS LD A,0FFH LD B,0CH CALL PREPIS LD A,0AH ;F6 LD B,03H CALL PREPIS LD A,04H ;FB-DATOVE POLE LD (HL),A INC HL LD A,0H LD B,0 CALL PREPIS LD A,08H ;F7-VYTVOR CRC LD (HL),A INC HL LD A,0B1H LD B,032H CALL PREPIS LD A,E CP 0EEH ;17-SECTOR? JR NZ,TABFO1 LD B,0 LD E,03H TABFO2: LD A,0B1H CALL PREPIS DEC E JR NZ,TABFO2 RET PREPIS: LD (HL),A INC HL DJNZ PREPIS RET ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MOTON: LD A,080H OUT (0DCH),A LD B,010H MOTON1: CALL TIME DJNZ MOTON1 LD A,(DISK) OR 084H OUT (0DCH),A LD HL,0 MOTON2: CALL TIMEA DEC HL LD A,H OR L JR NZ,MOTON3 JP INERR MOTON3: IN A,(0D8H) CPL RLCA JR C,MOTON2 RESTOR: LD A,0BH CALL FDCOPE AND 085H XOR 04H RET Z JP SEERR SEEK: LD A,01BH CALL FDCOPE AND 099H RET FDCOPE: CPL OUT (0D8H),A LD A,038H ;TO JE JR C LD (SKOK),A CALL READY CALL TIME IN A,(0D8H) CPL RET BUSY: CPL OUT (0D8H),A LD A,030H ;TO JE JR NC LD (SKOK),A READY: PUSH DE PUSH HL CALL TIMEA LD E,07H READY1: LD HL,0 READY2: DEC HL LD A,H OR L JR Z,READY3 IN A,(0D8H) CPL RRCA SKOK: JR C,READY2 POP HL POP DE RET READY3: DEC E JR NZ,READY1 LD A,029H JP SEERR TIMEA: PUSH DE LD DE,0FH ;125 uS JR TIM1 TIME: PUSH DE LD DE,02026H ;60 mS TIM1: DEC DE LD A,D OR E JR NZ,TIM1 POP DE RET ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PISSTO: PUSH AF LD C,009H LD DE,TEXT10 CALL BDOS POP AF LD BC,06400H ;STOVKY CALL PISST1 LD B,00AH ;DESITKY CALL PISST1 LD B,001H INC C PISST1: LD E,000H PISST2: SUB B INC E JR NC,PISST2 ADD A,B INC C DEC E JR NZ,PISST3 DEC C JR NZ,PISST3 LD E,0F0H PISST3: PUSH AF PUSH BC LD A,030H LD C,002H ADD A,E LD E,A CALL BDOS POP BC POP AF RET ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TEXT1: DEFB 0DH,0AH,0AH,'Basic Maxi-Disk Format Program $' TEXT2: DEFB 0DH,0AH,'(C) J. Langmaier & J. Kepka$' TEXT3: DEFB 0DH,0AH,'SHARP Club PLZEN$' TEXT4: DEFB 0DH,0AH,0AH,'Type disk drive to format or CR to reboot: $' TEXT5: DEFB 0DH,0AH,'Push a key when ready..$' TEXT6: DEFB 0DH,0AH,0AH,'Formatting..0$' TEXT7: DEFB 0DH,'Verifying.. 0 ' TEXT10: DEFB 08H,08H,08H,024h TEXT8: DEFB 0DH,'Format complete.$' TEXT9: DEFB 0DH,0AH,0AH,'Sorry,ERROR !!! $' TEXT11: DEFB 0DH,'Writing system $' TX11: DEFB 0DH,'Writing Error !$' TX12: DEFB 0DH,' Loading system file$' TX13: DEFB 0DH,' Make ready fd !!! $' TX14: DEFB 0DH,'Verify ERROR !!! $' TX15: DEFB 'Sorry,no system file program aborted!!!$' TX16: DEFB 0DH,'SEEK ERROR$' ASYST: DEFB 03H,'IPLPROMZ-2Z046',0DH DEFB 0DH,0DH,0,0 DEFW 0B000H ;Delka DEFW 0 ;Zavadeci adresa DEFW 0 ;Startovaci adresa DEFB 0,0,0,0 ;??? DEFW 800H ;Logicke cislo prvniho sektoru DEFB 'SUPER CAPACITY FORMAT PROGRAM 80 STOP ' ;Text do BOOTu BSYST: DEFB 123 ;Volume DEFB 030H ;Prvni volny sektor (3 stopa/1 sektor) DEFW 3*16-1 ;Posleni obsazeny sektony DEFW 07FFH ;Max cislo sektoru DEFB 0,0 DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0 SIDE: DEFS 1 DISK: DEFS 1 POKUS: DEFS 1 SEKTOR: DEFS 1 STOPA: DEFS 1 DMA: DEFS 2 FCB: DEFB 0 ;IMPLICITNI DISK DEFB 'M' ;TO JE DEFB 'Z' ;8 DEFB '-' ;ZNAKU DEFB '2' ;JMENA DEFB 'Z' ;DOPLNENYCH DEFB '0' ;ZPRAVA DEFB '4' ;MEZERAMI DEFB '6' DEFB 'B' ;A PRIPONA BOT DEFB 'O' DEFB 'T' DEFB 0 ;EX DEFB 0 ;S1 DEFB 0 ;S2 DEFB 0 ;RC DEFS 010H ;CISLA USEKU DEFB 0 ;CR DEFB 0 ;R0 DEFB 0 ;R1 DEFB 0 ;R2 ;************************************************************** AKONEC: END