ORG 100H H17T EQU 1 H37T EQU 0 H47T EQU 0 H67T EQU 1 ;******************** ; ; * * * N O T E * * * ; ; THE ABOVE 5 LINES OF CODE ARE THE PREAMBLE TO THE BIOS. ; THESE LINES ARE USED BY 'MAKEBIOS' IN GENERATING THE BIOS. ; THESE LINES SHOULD NOT BE ALTERED FOR ANY REASON UNLESS THE ; PROGRAM 'MAKEBIOS' IS ALSO ALTERED. THESE LINES MUST APPEAR ; AS THE FIRST 5 LINES IN THIS SOURCE. ; ;******************** FALSE EQU 0 TRUE EQU 1 IF TRUE-1 %: TRUE NE 1 ENDIF SPD4M EQU 1 ; 0=2 MHZ, 1=4 MHZ CLOCK SPEED ; ; THE FOLLOWING EQUATES DETERMINE WHETHER THE BIOS IS BEING ; ASSEMBLED FOR USE WITH CP/M 2.2.03 OR CP/M 2.2.04. IF A ; 2.2.03 SYSTEM IS BEING GENERATED, SET BIOS03 to TRUE, AND ; BIOS04 TO FALSE. IF A 2.2.04 SYSTEM IS BEING GENERATED, ; SET BIOS04 TO TRUE AND BIOS03 TO FALSE. ; BIOS03 EQU FALSE BIOS04 EQU TRUE IF BIOS03 AND BIOS04 % ERROR - BIOS03 AND BIOS04 BOTH TRUE ENDIF ; ; THE FOLLOWING EQUATE DETERMINES THE NUMBER OF WINCHESTER ; PARTITIONS WHICH CAN BE SUPPORTED BY THE BIOS. IF SET TO ; FALSE, THEN 2 PARTITIONS ARE SUPPORTED. IF SET TO TRUE, ; THEN FOUR PARTITIONS ARE AVAILABLE. ; NPART4 EQU TRUE ; TRUE IF 4 WINCHESTER PARTITIONS ; VERS EQU 04-BIOS03 LEVEL EQU ' ' MONTH EQU 01 DAY EQU 04 YEAR EQU 11 ;******************** ; ; BIOS2, A BIOS MODULE FOR CP/M 2.2 ; FOR USE WITH HEATH/ZENITH H/Z89 AND H-8 COMPUTERS ; AND H17/H77/H87 5 1/4 INCH DISKS ; AND H47/Z47 8 INCH DISKS ; AND H37 5 1/4 INCH DISKS ; AND H67 HARD DISK WITH 8 INCH FLOPPY ; AND H8-4,H89-3 SERIAL I/O CARD ; AND H89-11 H89 SERIAL/PARALLEL CARD ; ; COPYRIGHT 1980,1981 HEATH COMPANY, BENTON HARBOR, MICHIGAN ; ; HEATH/ZENITH SOFTWARE GROUP ; HILLTOP ROAD ; SAINT JOSEPH, MICHIGAN ; ; BIOS-80 MODIFICATIONS COPYRIGHT 1982,1983,1984 BY ; ; LIVINGSTON LOGIC ; POST OFFICE BOX 5334 ; PASADENA, CALIFORNIA ; ; SASI WINCHESTER MODIFICATIONS COPYRIGHT 1983,1984 BY ; ; LIVINGSTON LOGIC ; POST OFFICE BOX 5334 ; PASADENA, CALIFORNIA ; ;******************** XEBT EQU H67T IF (H17T+H37T+H47T+H67T-1) SHR 15 %: NO DISK DRIVE TYPES SPECIFIED ENDIF IF (2-(H17T+H37T+H47T+H67T)) SHR 15 %: TOO MANY DISK DRIVE TYPES SPECIFIED ENDIF EXPER EQU FALSE TOD EQU TRUE EVENT EQU FALSE INTINP EQU TRUE BRKKEY EQU TRUE AND INTINP H37ED EQU TRUE AND H37T H47ED EQU TRUE AND H47T H17ND EQU 3*H17T H37ND EQU 3*H37T H47ND EQU 2*H47T BIOS EQU $ BDOS EQU BIOS-0E00H CCP EQU BDOS-0800H CCPCLR EQU CCP+3 BOOT EQU 0000H IOBYTE EQU BOOT+3 LOGDSK EQU BOOT+4 BDMAP EQU 0040H BBDF EQU 0048H BBDA EQU 0049H BBP EQU 004AH BUPB EQU 004DH BBIOS EQU 004EH BSEL EQU 004FH XEBPRT EQU 0051H H17PRT EQU XEBPRT+1 H37PRT EQU H17PRT+1 H47PRT EQU H37PRT+1 FCB EQU BOOT+5CH BUFF EQU BOOT+80H TPA EQU BOOT+100H UPDP EQU 07CH UPFC EQU 07DH UPST EQU 07DH UPSC EQU 07EH UPSR EQU 07EH DPDC EQU 07FH U0 EQU 02H U1 EQU 04H U2 EQU 08H DFMO EQU 10H DFDI EQU 20H DFST EQU 40H DFHD EQU 01H DFT0 EQU 02H DFWP EQU 04H DFSD EQU 08H DSYN EQU 0FDH LPSA EQU 20 STSA EQU 8/2+1 STSB EQU 12/2+1 WHDA EQU 20 WHNA EQU 20 WSCA EQU 64*25/20 WRITA EQU 20 WRITB EQU 10 WRITC EQU 128/8 READA EQU 48 SPD EQU 250 HLTG EQU 20 HST EQU 24/4 STEPR EQU 30/2 DELAYS EQU 6*256+15 RETRIES EQU 10 D$E$TRK EQU 001H D$E$HSY EQU 002H D$E$HCK EQU 004H D$E$CHK EQU 008H D$E$RNF EQU 010H D$E$MDS EQU 020H D$E$WRP EQU 040H D$E$UNR EQU 080H H47CTL EQU 0 H47DAT EQU 1 DSTR EQU 10000000B DSIE EQU 01000000B DSDONE EQU 00100000B DSERR EQU 00000001B DCIE EQU 01000000B DCRES EQU 00000010B DRS EQU 01H DRAS EQU 02H DSNS EQU 03H DRD EQU 07H DWR EQU 08H DCOPY EQU 0BH DFMT EQU 0DH DFMTD EQU 0EH DFMTD2 EQU 0FH FD$BASE EQU 078H FD$CON EQU FD$BASE FD$INT EQU FD$BASE+1 FD$CMD EQU FD$BASE+2 FD$STA EQU FD$BASE+2 FD$DAT EQU FD$BASE+3 FD$SEC EQU FD$BASE+2 FD$TRK EQU FD$BASE+3 FD$CD EQU 0 FD$TS EQU 1 FDCRST EQU 000H FDCSEK EQU 010H FDCSTP EQU 020H FDCSTI EQU 040H FDCSTO EQU 060H FDCRDS EQU 080H FDCWRS EQU 0A0H FDCRDA EQU 0C0H FDCRDT EQU 0E0H FDCWRT EQU 0F0H FDCFI EQU 0D0H FDFUTR EQU 00010000B FDFHLB EQU 00001000B FDFVRF EQU 00000100B FDFS6 EQU 00000000B FDFS12 EQU 00000001B FDFS20 EQU 00000010B FDFS30 EQU 00000011B FDFMRF EQU 00010000B FDFSLF EQU 00001000B FDFDLF EQU 00000100B FDFSS1 EQU 00000010B FDFDDM EQU 00000001B FDFINI EQU 00000000B FDFII0 EQU 00000001B FDFII1 EQU 00000010B FDFII2 EQU 00000100B FDFII3 EQU 00001000B FDSNRD EQU 10000000B FDSWPV EQU 01000000B FDSHLD EQU 00100000B FDSRTE EQU 00100000B FDSWTF EQU 00100000B FDSSEK EQU 00010000B FDSRNF EQU 00010000B FDSCRC EQU 00001000B FDSTK0 EQU 00000100B FDSLDT EQU 00000100B FDSIND EQU 00000010B FDSBSY EQU 00000001B FDRATRK EQU 0 FDRASID EQU 1 FDRASEC EQU 2 FDRASL EQU 3 FDRACRC EQU 4 FDRAL EQU 6 FDSL128 EQU 0 FDSL256 EQU 1 FDSL512 EQU 2 FDSL1K EQU 3 CONIRQ EQU 00000001B CONDRQ EQU 00000010B CONMFM EQU 00000100B CONMO EQU 00001000B CONDS0 EQU 00010000B CONDS1 EQU 00100000B CONDS2 EQU 01000000B CONDS3 EQU 10000000B NTRKS37 EQU 40 NTRKD37 EQU 80 NSBT37 EQU 60 FDHDD EQU 20 DELAY37 EQU 6*256+15 H37VEC EQU 8*4 DLYMO37 EQU H37VEC+3 DLYH37 EQU H37VEC+4 H37CTL EQU H37VEC+5 H37IRET EQU H37VEC+6 SADATP: EQU 0 SACTLP: EQU 1 SASTAP: EQU SACTLP SASELP: EQU SACTLP+1 SADBE: EQU 00000010B SARES: EQU 00010000B SAIE: EQU 00100000B SASEL: EQU 01000000B SAACKH: EQU 10000000B SAACK: EQU 00000001B SAIRQ: EQU 00000010B SABPE: EQU 00000100B SABUSY: EQU 00001000B SACMD: EQU 00010000B SAMSG: EQU 00100000B SAIO: EQU 01000000B SAREQ: EQU 10000000B SATDRC: EQU 000H SAHOMC: EQU 001H SARSYC: EQU 002H SARSC: EQU 003H SAFMTC: EQU 004H SARDC: EQU 008H SAWRC: EQU 00AH SAIDCC: EQU 00CH SAFDDC: EQU 0C0H SAOP: EQU 0 SAHADD: EQU SAOP+1 SALUN: EQU 11100000B SAMADD: EQU SAHADD+1 SALADD: EQU SAMADD+1 SASCNT: EQU SALADD+1 SACTL: EQU SASCNT+1 SAFERR: EQU 00000010B SAWFE: EQU 003H SADNRE: EQU 004H SAIAME: EQU 012H SAECCE: EQU 018H PTJMP: EQU 0 PTVER: EQU PTJMP+3 PVERS: EQU 'B' PTNUL: EQU PTVER+1 PTSEK: EQU PTNUL+3 PTECC: EQU PTSEK+1 PTPCC: EQU PTECC+1 PTRWC: EQU PTPCC+2 PTHDS: EQU PTRWC+2 PTCYL: EQU PTHDS+1 PTPTBL: EQU PTCYL+2 PTNAM: EQU 0 PTCAT: EQU PTNAM+10 PTWP: EQU PTCAT+1 PTOFF: EQU PTWP+1 PTPLEN: EQU PTOFF+2 MI$JMP EQU 0C3H H8CTL EQU 0F0H H8TR EQU 0D0H H88CTL EQU 0F2H M1H EQU 020H IO0 EQU 040H CLKE EQU 002H CLKVEC EQU 0008H TICCNT EQU 000BH CTLPRT EQU 000DH H8FLAG EQU 000EH DEVCTL EQU 000FH SERVEC EQU 0008H*3 XEBND SET 2 IF NPART4 XEBND SET 4 ENDIF NDISKS EQU H17ND+H37ND+H47ND+XEBND IF TRUE-1 %: TRUE NE 1 ENDIF IF (8-NDISKS) SHR 15 %: NDISK GT 8 -- TOO MANY LOGICAL DRIVES %: NUMBER OF PARTITIONS MUST BE REDUCED ENDIF NSECTS EQU 44 IF (H47T AND H47ED) OR (H37T AND H37ED) HSTSIZ EQU 1024 ENDIF IF NOT ((H47T AND H47ED) OR (H37T AND H37ED)) HSTSIZ EQU 256 ENDIF BT$WM EQU 0FFH BT$CD EQU 000H H85CRT EQU 372Q H84CRT EQU 0E8H IF BIOS04 H11TTY EQU 0D8H H11LPTP EQU 0D0H ENDIF H84TTY EQU 0D0H H84LPT EQU 0E0H H84RDP EQU 0D8H B75 EQU 1536 B110 EQU 1047 B134 EQU 857 B300 EQU 384 B600 EQU 192 B1200 EQU 96 B2400 EQU 48 B4800 EQU 24 B9600 EQU 12 B19200 EQU 6 NULL EQU 00H CTLC EQU 03H BELL EQU 07H CR EQU 0DH LF EQU 0AH PADCH EQU CR TTY EQU 0 CRT EQU 1 PTR EQU 1 PTP EQU 1 BAT EQU 2 UR1 EQU 2 UP1 EQU 2 LPT EQU 2 UC1 EQU 3 UR2 EQU 3 UP2 EQU 3 UL1 EQU 3 DIOB EQU (CRT) OR (UR1 SHL 2) OR (UP1 SHL 4) OR (LPT SHL 6) DDSEL EQU 0 DDRD EQU 3 DDWR EQU 6 DDRES EQU 9 DDMNT EQU 12 DPEXLT EQU 0 DPEDPB EQU 10 DPEHTH EQU 16 DPEL EQU 24 DPEFLAG EQU DPEHTH+0 DPETYPE EQU 11100000B DPENE EQU 00000000B DPEH17 EQU 01000000B DPEH37 EQU 01100000B DPEH47 EQU 10000000B DPEXEB EQU 00100000B DPEP7C EQU 00010000B DPE48RO EQU 00010000B DPE96T EQU 00001000B DPEASGN EQU 00000100B DPEED EQU 00000100B DPEDD EQU 00000010B DPE2S EQU 00000001B DPEUNIT EQU DPEHTH+1 DPERPS EQU DPEHTH+2 DPERPAB EQU DPEHTH+3 DPETRK EQU DPEHTH+4 DPEUNK EQU 10000000B DPELPB EQU DPETRK DPESEK EQU DPEHTH+5 DPEMO EQU 10000000B DPEUPB EQU DPEHTH+6 DPEFLG2 EQU DPEHTH+6 DPEIMG EQU 00000010B DPE96TM EQU 00000001B DPELUN EQU DPEHTH+7 DPEHL EQU 8 DPBSPT EQU 0 DPBBSH EQU DPBSPT+2 DPBBLM EQU DPBSPT+3 DPBEXM EQU DPBSPT+4 DPBDSM EQU DPBSPT+5 DPBDRM EQU DPBSPT+7 DPBAL0 EQU DPBSPT+9 DPBAL1 EQU DPBSPT+10 DPBCKS EQU DPBSPT+11 DPBOFF EQU DPBSPT+13 DPBL EQU 15 LABVER EQU 0 LABBUF EQU 0 BDTYPE EQU LABBUF+3 LABEL EQU LABBUF+4 LABTYP EQU LABEL+0 LABHTH EQU LABTYP+1 LABDPB EQU LABHTH+DPEHL LABCS EQU LABDPB+DPBL LABLEN EQU LABCS-LABEL+1 IF BIOS04 EPDATA EQU 0 EPSTAT EQU 1 EPSYN EQU 1 EPMODE EQU 2 EPCMD EQU 3 EPTXR EQU 00000001B EPRXR EQU 00000010B EPTXE EQU 00000100B EPDSC EQU 00000100B EPPE EQU 00001000B EPOE EQU 00010000B EPFE EQU 00100000B EPSD EQU 00100000B EPDCD EQU 01000000B EPDSR EQU 10000000B EPMBRF EQU 00000011B EPS1X EQU 000H EPA1X EQU 001H EPA16X EQU 002H EPA64X EQU 003H EPCL EQU 00001100B EPCL5 EQU 000H EPCL6 EQU 004H EPCL7 EQU 008H EPCL8 EQU 00CH EPPC EQU 00010000B EPPT EQU 00100000B EPASBL EQU 11000000B EPSB1 EQU 040H EPSB15 EQU 080H EPSB2 EQU 0C0H EPSTC EQU 01000000B EPNSC EQU 10000000B EPBRS EQU 00001111B EPMR2U EQU 11110000B EPTXEN EQU 00000001B EPDTR EQU 00000010B EPRXEN EQU 00000100B EPSBRK EQU 00001000B EPSDLE EQU 00001000B EPRESE EQU 00010000B EPRTS EQU 00100000B EPOM EQU 11000000B EPNORM EQU 000H EPOM1 EQU 040H EPOMLL EQU 080H EPOMRL EQU 0C0H EPB050 EQU 0 EPB075 EQU 1 EPB110 EQU 2 EPB134 EQU 3 EPB150 EQU 4 EPB300 EQU 5 EPB600 EQU 6 EPB120 EQU 7 EPB180 EQU 8 EPB200 EQU 9 EPB240 EQU 10 EPB360 EQU 11 EPB480 EQU 12 EPB720 EQU 13 EPB960 EQU 14 EPB192 EQU 15 PPDATA EQU 0 PPDATB EQU 1 PPDATC EQU 2 PPCTL EQU 3 PPMSF EQU 10000000B PPGAMS EQU 01100000B PPGAM0 EQU 000H PPGAM1 EQU 020H PPGAM2 EQU 040H PPGAPA EQU 00010000B PPGAPC EQU 00001000B PPGBMS EQU 00000100B PPGBM0 EQU 000H PPGBM1 EQU 004H PPGBPB EQU 00000010B PPGBPC EQU 00000001B PPBSEL EQU 00001110B PPBS0 EQU 000H PPBS1 EQU 002H PPBS2 EQU 004H PPBS3 EQU 006H PPBS4 EQU 008H PPBS5 EQU 00AH PPBS6 EQU 00CH PPBS7 EQU 00EH PPBSR EQU 000000001B EPINT EQU 4 EPIE EQU 00000001B PPDS EQU 00000001B PPRDY EQU 10000000B ENDIF JMP CBOOT WBOOTE: JMP WBOOT JMP CONST JMP CONIN JMP CONOUT JMP LIST JMP PUNCH JMP READER JMP HOME JMP SETDSK JMP SETTRK JMP SETSEC JMP SETDMA JMP READ JMP WRITE JMP LISTST JMP SECTRAN BIOSVER DB VERS DEFIOB DB DIOB PRTRDY DB 010H MODE DB MODEB1 MODEB0 EQU 00000001B MODEB1 EQU 00000010B MODEB2 EQU 00000100B MODEB3 EQU 00001000B MODEB6 EQU 01000000B MODEB7 EQU 10000000B IF BIOS04 MODE2 DB MODE2B2+MODE2B1 MODE2B0 EQU 00000001B MODE2B1 EQU 00000010B MODE2B2 EQU 00000100B ENDIF H84PT1: DB H84CRT CRTBAUD DW B9600 H84PT2: DB H84TTY TTYBAUD:DW B300 H84PT3: DB H84LPT LPTBAUD:DW B4800 H84PT4: DB H84RDP RDPBAUD:DW B300 IF BIOS04 H11PT2 DB H11TTY TTY11B DW EPB300 H11PT3 DB H11LPTP XEBAP: DB 0 DB 0 ENDIF IF BIOS03 XEBAP: DB 0 DW 0 ENDIF BSIZE DB (BIOSEND-BIOS+255)/256 BEND DW BIOSEND SECNT17 DW 0 SECNT37 DW 0 BNDISKS DB NDISKS DPBASE DS 0 IF H17T DPE0 DW XLT17,0000H DW 0000H,0000H DW DIRBUF,DPB17S DW CSV0,ALV0 DB DPEH17 DB U0 DB 2 DB 8 DB 0FFH DB STEPR DB 0 DB 0 DPE1 DW XLT17,0000H DW 0000H,0000H DW DIRBUF,DPB17S DW CSV1,ALV1 DB DPEH17 DB U1 DB 2 DB 8 DB 0FFH DB STEPR DB 0 DB 0 DPE2 DW XLT17,0000H DW 0000H,0000H DW DIRBUF,DPB17S DW CSV2,ALV2 DB DPEH17 DB U2 DB 2 DB 8 DB 0FFH DB STEPR DB 0 DB 0 ENDIF IF H37T DPE37$0 DW 0000H,0000H DW 0000H,0000H DW DIRBUF,DPB37$0 DW CSV37$0,ALV37$0 DB DPEH37+DPEDD DB CONDS0 DB 2 DB 8 DB DPEUNK DB FDFS30 DB 0 DB 0 DPE37$1 DW 0000H,0000H DW 0000H,0000H DW DIRBUF,DPB37$1 DW CSV37$1,ALV37$1 DB DPEH37+DPEDD DB CONDS1 DB 2 DB 8 DB DPEUNK DB FDFS30 DB 0 DB 0 DPE37$2 DW 0000H,0000H DW 0000H,0000H DW DIRBUF,DPB37$2 DW CSV37$2,ALV37$2 DB DPEH37+DPEDD DB CONDS2 DB 2 DB 8 DB DPEUNK DB FDFS30 DB 0 DB 0 ENDIF IF H47T DPE47$0 DW XLT0S,0000H DW 0000H,0000H DW DIRBUF,DPB0SS DW CSV47$0,ALV47$0 DB DPEH47 DB 000H DB 1 DB 8 DB 0,0,0,0 DPE47$1 DW XLT0S,0000H DW 0000H,0000H DW DIRBUF,DPB0SS DW CSV47$1,ALV47$1 DB DPEH47 DB 020H DB 1 DB 8 DB 0,0,0,0 ENDIF IF XEBT DPEXE$0 DW 0000H,0000H DW 0000H,0000H DW DIRBUF,DPBXE$0 DW 0000H,ALVXE$0 DB DPEXEB DB 0 DB 0 DB 0 DW 0 DW 0 DPEXE$1 DW 0000H,0000H DW 0000H,0000H DW DIRBUF,DPBXE$1 DW 0000H,ALVXE$1 DB DPEXEB DB 0 DB 0 DB 0 DW 0 DW 0 ENDIF IF XEBT AND NPART4 DPEXE$2 DW 0000H,0000H DW 0000H,0000H DW DIRBUF,DPBXE$2 DW 0000H,ALVXE$2 DB DPEXEB DB 0 DB 0 DB 0 DW 0 DW 0 DPEXE$3 DW 0000H,0000H DW 0000H,0000H DW DIRBUF,DPBXE$3 DW 0000H,ALVXE$3 DB DPEXEB DB 0 DB 0 DB 0 DW 0 DW 0 ENDIF WBOOT: LXI SP,STACK EI XRA A MOV C,A MOV E,A CALL SETDSK MOV A,H ORA L JZ WBTE PUSH H CALL HLIHL SHLD XLTW1 SHLD XLTW POP H PUSH H LXI D,DPEDPB DAD D CALL HLIHL MOV A,M STA SPT1 STA SPT POP H IF H47T PUSH H LXI D,DPEHTH DAD D MOV A,M MOV C,A ANI DPETYPE CPI DPEH47 JNZ WBT0 WBT0X: MVI A,26 LXI H,XLT0S STA SPT SHLD XLTW WBT0: POP H ENDIF LXI D,DPEHTH DAD D LXI D,CCP-128 LXI B,NSECTS*256 IF H37T OR XEBT MOV A,M ANI DPETYPE CPI DPEH37 JZ WBT0Y CPI DPEXEB JNZ WBT0Z WBT0Y: LXI D,CCP-256 ENDIF WBT0Z: LXI H,0 WBT1: SHLD SEKTRK XCHG SHLD DMAB WBT2: PUSH B MVI B,0 LHLD XLTW XCHG CALL SECTRAN MOV C,L MOV A,L PUSH PSW CALL SETSEC POP PSW DCR A CALL CDA SHLD DMAADR MOV A,H LXI B,CCP CMP B JC WBT3 LXI B,BIOS CMP B JNC WBT3 CALL READ ORA A JNZ WBTE POP B DCR B JZ WBT4 PUSH B WBT3: POP B INR C LDA SPT CMP C JNZ WBT2 MVI C,0 CALL CDA PUSH H LDA SPT1 STA SPT LHLD XLTW1 SHLD XLTW POP H XCHG LHLD SEKTRK INX H JMP WBT1 WBT4: MVI A,BT$WM GOW: PUSH PSW MVI A,MI$JMP LXI H,WBOOTE STA BOOT SHLD BOOT+1 LXI H,BDOS+6 STA BOOT+5 SHLD BOOT+6 LXI B,BUFF CALL SETDMA CALL FLUSH1 POP PSW RRC LDA MODE JNC GOW1 RAL GOW1: RAL LDA LOGDSK STA SEKDSK MOV C,A JC CCP JMP CCPCLR WBTE: LXI H,BTMSG CALL PMSG CALL CONIN JMP WBOOT CDA: LHLD DMAB ORA A RAR MOV D,A MVI A,0 RAR MOV E,A DAD D RET HOME: LDA HSTWRT ORA A JNZ HOMED STA HSTACT HOMED: LXI B,0 SETTRK: MOV H,B MOV L,C SHLD SEKTRK RET SETDSK: MOV A,E STA SETDSKB MOV A,C STA SETDSKA CPI NDISKS JNC SETDE LXI H,BDMAP CALL DADA MOV A,M STA SEKDSK CALL GETDPE SHLD SETDSKC LXI D,DPEHTH DAD D SHLD DPBX SETDSK1: LDA SETDSKB RAR JC SETDSK2 IF XEBT MOV A,M ANI DPETYPE CPI DPEXEB JNZ SETDSK3 MOV A,M ANI DPEASGN JZ SETDE SETDSK3: ENDIF MVI A,0FFH STA SETDSKD CALL FLUSH LDA SEKDSK CALL SHD LXI D,DDSEL CALL DSKDIS MVI A,0 STA SETDSKD JC SETDE SETDSK2: LHLD SETDSKC RET SETDE: LDA SETDSKA LXI H,LOGDSK CMP M JNZ SETDE1 MVI M,0 SETDE1: LXI H,0000H RET SETDSKA DS 1 SETDSKB DS 1 SETDSKC DS 2 SETDSKD DS 1 DSKDIS: MOV A,M RLC RLC RLC ANI DPETYPE/32 IF DPETYPE-11100000B %: DPETYPE NE 11100000B ENDIF ADD A LXI H,DTT CALL DADA CALL HLIHL DAD D PCHL DTT: DW NULDVD IF XEBT DW XEBDVD ENDIF IF NOT (XEBT) DW NULDVD ENDIF IF H17T DW H17DVD ENDIF IF NOT (H17T) DW NULDVD ENDIF IF H37T DW H37DVD ENDIF IF NOT (H37T) DW NULDVD ENDIF IF H47T DW H47DVD ENDIF IF NOT (H47T) DW NULDVD ENDIF DW NULDVD DW NULDVD DW NULDVD SETSEC: MOV A,C DCR A STA SEKSEC RET SETDMA: MOV H,B MOV L,C SHLD DMAADR RET SECTRAN: XCHG MOV A,H ORA L DAD B JZ SECTRAN1 MOV L,M MVI H,0 RET SECTRAN1: INX H RET WRALL EQU 0 WRDIR EQU 1 WRUAL EQU 2 READ: XRA A STA UNACNT MVI A,1 STA READOP STA RSFLAG MVI A,WRUAL STA WRTYPE JMP RWOPER WRITE: XRA A STA READOP MOV A,C STA WRTYPE CPI WRUAL JNZ CHKUNA LHLD DPBX INX H INX H INX H MOV A,M STA UNACNT LDA SEKDSK STA UNADSK LHLD SEKTRK SHLD UNATRK LHLD DPBX LXI D,-DPEHTH DAD D CALL HLIHL MOV A,H ORA L JNZ WRITE0 LDA SEKSEC STA UNASI JMP CHKUNA WRITE0: LDA SEKSEC INR A MVI C,0 WRITE1: CMP M JZ WRITE2 INR C INX H JMP WRITE1 WRITE2: MOV A,C STA UNASI CHKUNA: LDA UNACNT ORA A JZ ALLOC DCR A STA UNACNT LDA SEKDSK LXI H,UNADSK CMP M JNZ ALLOC LDA SEKTRK LXI H,UNATRK CMP M JNZ ALLOC LDA SEKTRK+1 INX H CMP M JNZ ALLOC LHLD DPBX LXI D,-DPEHTH DAD D CALL HLIHL MOV A,H ORA L JNZ CHKUNA5 LDA UNASI LXI H,SEKSEC JMP CHKUNA6 CHKUNA5: LDA UNASI CALL DADA LDA SEKSEC INR A CHKUNA6: CMP M LXI H,UNASI JNZ ALLOC INR M MOV A,M PUSH H PUSH PSW LHLD DPBX LXI D,-DPEHTH+DPEDPB DAD D CALL HLIHL POP PSW CMP M POP H JC NOOVF MVI M,0 LHLD UNATRK INX H SHLD UNATRK NOOVF: XRA A STA RSFLAG JMP RWOPER ALLOC: XRA A STA UNACNT INR A STA RSFLAG RWOPER: ; READ/WRITE ENTRY IN ORIGINAL BIOS IF SPD4M ; UNCOMMENT THIS SECTION IF NEEDED R2MHZ: LHLD DPBX ; HL POINTS TO CURRENT DISK PARAMETER BLOCK MOV A,M ; GET DRIVE TYPE ANI DPETYPE ; MASK ALL BUT APPROPRIATE BITS CPI DPEH37 ; SKIP SLOWDOWN IF H37 OR MT DRIVE JZ RWOPR ; ONLY CHANGE SPEED IF H17 DRIVE CALL CHG2M ; GO SET 2 MHZ OPERATION CALL RWOPR ; EXECUTE R/W OPERATION R4MHZ: CALL CHG4M ; RESTORE SPEED TO 4MZ RET ; RETURN TO CCP RWOPR: ENDIF XRA A STA ERFLAG LHLD DPBX MOV C,M INX H INX H MOV B,M IF H47T MOV A,C ANI DPETYPE CPI DPEH47 JNZ RW0 RW0X: LHLD SEKTRK MOV A,H ORA L JNZ RW0 MVI B,1 ENDIF RW0: MOV A,B STA LSP LDA SEKSEC RW1: PUSH PSW MOV A,B RAR MOV B,A JC RW2 POP PSW ORA A RAR JMP RW1 RW2: POP PSW STA SEKHST LXI H,HSTACT MOV A,M MVI M,1 ORA A JZ FILHST LDA SEKDSK LXI H,HSTDSK CMP M JNZ NOMATCH LDA SEKTRK LXI H,HSTTRK CMP M JNZ NOMATCH LDA SEKTRK+1 INX H CMP M JNZ NOMATCH LDA SEKHST LXI H,HSTSEC CMP M JZ MATCH NOMATCH: LDA HSTWRT ORA A CNZ WRITEHST FILHST: LDA SEKDSK STA HSTDSK LHLD SEKTRK SHLD HSTTRK LDA SEKHST STA HSTSEC LDA READOP ORA A JNZ FIL1 LDA LSP DCR A JZ FIL2 FIL1: LDA RSFLAG ORA A CNZ READHST FIL2: XRA A STA HSTWRT MATCH: LDA LSP DCR A LXI H,SEKSEC ANA M LXI H,0 JZ M2 LXI D,128 M1: DAD D DCR A JNZ M1 M2: LXI D,HSTBUF DAD D XCHG LHLD DMAADR MVI C,128 LDA READOP ORA A JNZ RWMOVE MVI A,1 STA HSTWRT XCHG RWMOVE: CALL MOVEITX LDA WRTYPE CPI WRDIR LDA ERFLAG JNZ RW9 ORA A JNZ RW9A XRA A STA HSTWRT CALL WRITEHST LDA ERFLAG RW9: ANA A RZ RW9A: PUSH PSW CALL FLUSH1 POP PSW RET READHST: XRA A STA RWOP STA ERFLAG LDA HSTDSK CALL SHD LXI D,DDRD CALL DSKDIS LDA ERFLAG ORA A RZ CALL PRTERR RZ CPI 0FFH RZ JMP READHST WRITEHST: XRA A STA ERFLAG INR A STA RWOP LDA HSTDSK CALL SHD LXI D,DDWR CALL DSKDIS LDA ERFLAG ORA A RZ CALL PRTERR RZ CPI 0FFH RZ JMP WRITEHST FLUSH: LDA HSTACT ANA A JZ FLUSH1 LDA HSTWRT ANA A CNZ WRITEHST FLUSH1: XRA A STA HSTACT STA HSTWRT STA UNACNT RET PRTERR: LDA SETDSKD ORA A STC RNZ LXI H,EMSG0 CALL PMSG LDA RWOP ORA A LXI H,EMSG1 JZ PRTERA LXI H,EMSG2 PRTERA: EQU $ CALL PMSG LDA HSTDSK ANI 00FH ADI 'A' STA ERDSK LXI H,EMSG3 CALL PMSG LHLD HSTTRK CALL PDEC LXI H,EMSG4 CALL PMSG LDA HSTSEC INR A MOV L,A MVI H,0 CALL PDEC LXI H,EMSG5 CALL PMSG LDA ERRTYP CALL HOUT PRTER0: EQU $ LXI H,EMSG6 CALL PMSG DI LDA H84PT1 MOV C,A PRTER4: EQU $ MOV A,C ADI 5 CALL PIN RRC JNC PRTER4 ; INP A DB 0EDH,078H ANI 05FH PUSH PSW ; OUTP A DB 0EDH,079H EI LXI H,CRLF CALL PMSG POP PSW CPI 'A' JZ WBOOT CPI 'I' JZ PRTER7 CPI 'R' JZ PRTER5 CPI 'D' JNZ PRTER0 MVI A,0FFH PRTER6: EQU $ STA ERFLAG ORA A RET PRTER5: EQU $ MVI A,1 JMP PRTER6 PRTER7: EQU $ XRA A JMP PRTER6 EMSG0: DB CR,LF,CR,LF,BELL,'Disk ',0 EMSG1: DB 'READ',0 EMSG2: DB 'WRITE',0 EMSG3: DB ' Error on Drive ' ERDSK: DB '.: Track=',0 EMSG4: DB ' Sector=',0 EMSG5: DB ' Status=',0 EMSG6: DB CR,LF,BELL,'A, R, D or I? ',0 PDEC: EQU $ PUSH D PUSH H LXI B,-10 LXI D,-1 PDEC0: EQU $ DAD B INX D JC PDEC0 LXI B,10 DAD B XCHG MOV A,H ORA L CNZ PDEC MOV A,E ADI '0' MOV C,A CALL CONOUT POP H POP D RET SHD: IF H17T OR H37T STA SHDA STA SHDB ENDIF CALL GETDPEX SHLD HSTDPB IF H17T OR H37T MOV A,M ANI DPETYPE CPI DPEH17 JZ SHD1 CPI DPEH37 JNZ SHD6 SHD1: XCHG LXI H,DPEFLG2-DPEHTH DAD D MOV A,M ANI DPEIMG JZ SHD2 LXI H,DPELUN-DPEHTH DAD D MOV A,M STA SHDB CALL GETDPEX XCHG SHD2: LXI H,DPELUN-DPEHTH DAD D LDA SHDA CMP M JZ SHD5 MOV M,A CALL SHD9 ADI 'A' STA MNMSGA LDA SHDB CALL SHD9 ADI 'A' STA MNMSGB LXI D,DDMNT LHLD HSTDPB CALL DSKDIS LXI H,MNMSG CALL PMSG SHD3: CALL CONIN CPI CR JZ SHD4 MVI C,BELL CALL CONOUT JMP SHD3 SHD4: LXI H,CRLF CALL PMSG SHD5: LHLD HSTDPB ENDIF SHD6: RET IF H17T OR H37T SHD9: RAR RAR RAR RAR ANI 0FH RET SHDA DS 1 SHDB DS 1 MNMSG DB CR,LF,'PUT DISK ' MNMSGA DB '. IN DRIVE ' MNMSGB DB '.: AND PRESS RETURN',0 ENDIF IF H17T H17DVD: JMP SET17 JMP RD17M JMP WR17M JMP RESH17 JMP MNTH17 H17PMS: DW DPB17S DB DPE48RO,8 DW DPB17S DB 0,8 DW DPB17X DB 0,8 DW DPB17X DB DPE48RO+DPE2S,8 DW DPB17X DB 1,8 DW DPB17D DB 1,16 SET17: ; INCORPORATE SPEED CHANGE HERE FOR 2/4 MHZ ENDIF ; TO BREAK THE H17T CONDITIONAL PROCESSING IF SPD4M AND H17T ; INCLUDE IF 2/4 MHZ AND H17 CALL CHG2M ; DROP TO 2 MHZ FOR H17 OPERATION CALL SET17M ; GO DO IT CALL CHG4M ; DONE SO RETURN TO 4 MHZ RET SET17M: ; NEW LABLE FOR OLD SET17 ENTRY ENDIF ; END OF 2/4 MHZ CHANGE CODE IF H17T ; RE-INSTATE H17T CONDITIONAL CALL RDYH17 ; ORIG ENTRY TO SET17 ROUTINE RC LHLD DPBX LXI D,DPETRK-DPEHTH DAD D MVI M,0FFH EI CALL SDP CALL MAI CALL MAI MVI A,HST STA DLYW CALL SET17CK JC SET17ER LHLD DPBX DCR A JZ SET17D INR A CPI 2 JNZ SET17A MVI A,DPE96T ANA M SET17ER:MVI A,1 JZ SET17D CALL MAI PUSH H MVI A,HST STA DLYW CALL SET17CK POP H JC SET17E DCR A CPI 2 JZ SET17D SET17E: MVI A,3 JMP SET17D SET17A: MVI A,DPE96T ANA M MVI A,4 JZ SET17D INR A ; JMP SET17D SET17D: PUSH PSW CALL STZ POP PSW ADD A ADD A MOV E,A MVI D,0 LXI H,H17PMS DAD D XCHG LHLD SETDSKC LXI B,DPEDPB DAD B LDAX D MOV M,A INX D INX H LDAX D MOV M,A INX D LHLD DPBX MVI A,0FFH-DPE2S-DPE48RO ANA M XCHG ORA M XCHG MOV M,A INX D LXI B,DPERPAB-DPEHTH DAD B LDAX D MOV M,A JMP XOK SET17CK0: CALL STS SET17CK:LDA DLYW ORA A JNZ SET17CK0 MVI B,LPSA SET17K1:DI CALL WSC JC SET17K2 CALL RDB CALL RDB PUSH PSW CALL RDB MOV H,D CALL RDB EI CMP H JZ SET17K3 POP PSW SET17K2:CALL STS DCR B JNZ SET17K1 STC RET SET17K3:POP PSW ANA A RET RD17M: LDA HSTSEC STA SECTOR LDA HSTTRK STA TRACK CALL RD17 MVI A,00H JNC RDH1 DCR A RDH1: STA ERFLAG RET WR17M: LDA HSTSEC STA SECTOR LDA HSTTRK STA TRACK CALL WR17 MVI A,00H JNC WRH1 DCR A WRH1: STA ERFLAG RET XOK: XRA A XIT: PUSH PSW DI LXI H,DELAYS SHLD DLYMO LDA CTLPRT ANI 0FFH-040H STA CTLPRT OUT H88CTL POP PSW EI RET RD17: CALL SDP RD171: CALL SDT CALL LPS JC RD17E MVI B,0 LXI H,HSTBUF CALL WSC MVI A,D$E$MDS JC RD17E RD172: CALL RDB MOV M,A INX H DCR B JNZ RD172 MOV B,D CALL RDB CMP B JZ XOK MVI A,D$E$CHK RD17E: CALL H17E JNC RD171 JMP XIT WR17: CALL SDP WR171: IN DPDC ANI DFWP MVI A,D$E$WRP JNZ WR17E LHLD HSTDPB MOV A,M ANI DPE48RO MVI A,D$E$WRP JNZ WR17E CALL SDT CALL LPS JC WR17E MVI B,0 LXI H,HSTBUF WRITAL: EQU $+1 MVI A,WRITA WR172: DCR A JNZ WR172 MVI C,WRITB WRITCL: EQU $+1 MVI A,WRITC CALL WSP WR173: MOV A,M CALL WNB INX H DCR B JNZ WR173 MOV A,D CALL WNB CALL WNB CALL WNB CALL WNB LDA DEVCTL OUT DPDC JMP XOK WR17E: CALL H17E JNC WR171 JMP XIT H17E: EI STA ERRTYP ANI D$E$UNR+D$E$WRP JNZ H17E4 LHLD SECNT17 INX H SHLD SECNT17 LXI H,ERRCNT DCR M JZ H17E4 LDA ERRTYP CPI D$E$TRK JZ H17E2 MOV A,M CPI 5 JZ H17E2 RAR CMC RNC LHLD TRKPT RAR MOV A,M JC H17E1 CPI 39 JZ H17E3 INR M CALL MAI JMP H17E3 H17E1: ORA A JZ H17E3 DCR M CALL MAO JMP H17E3 H17E2: CALL STZ H17E3: XRA A RET H17E4: STC RET H17MSG DB 'H17',0 MNTH17: LHLD HSTDPB LXI D,DPETRK-DPEHTH DAD D MVI M,0FFH ; JMP RESH17 RESH17: XRA A OUT DPDC STA DEVCTL LXI H,0 SHLD DLYMO RET RDYH17: CALL ONH17 LXI H,DLYW RDYH17A: MOV A,M ANA A JNZ RDYH17A LXI H,TICCNT MVI A,100 ADD M MOV B,A MVI C,0 MOV D,C RDYH17B: IN DPDC ANI DFHD CMP D JZ RDYH17C MOV D,A INR C WHDAL1: EQU $+1 MVI A,WHDA RDYH17B1: DCR A JNZ RDYH17B1 RDYH17C: MOV A,B CMP M JNZ RDYH17B MOV A,C CPI 10*2 JC RDYH17D CPI 12*2+1 CMC JNC RDYH17E RDYH17D: MVI A,D$E$UNR CALL H17E RDYH17E: JMP XIT ONH17: EI LXI H,0 SHLD DLYMO LDA CTLPRT ANI 0FFH-040H STA CTLPRT OUT H88CTL LHLD HSTDPB INX H MOV A,M ORI DFMO OUT DPDC MOV B,A LXI H,DEVCTL MOV A,M ANI DFMO JNZ ONH17A PUSH H LHLD HSTDPB LXI D,DPESEK-DPEHTH DAD D MOV A,M POP H RAL ENDIF IF DPEMO-10000000B AND (H17T) %: DPEMO NE 10000000B ENDIF IF (H17T) MVI A,SPD JNC ONH17B RAR RAR ANI 03FH JMP ONH17B ONH17A: MOV A,M ANI U0+U1+U2 ANA B MVI A,0 JNZ ONH17B MVI A,HLTG ONH17B: STA DLYW MOV M,B RET SDP: MVI A,4 LXI B,0 SDP0: PUSH PSW LXI D,9 LXI H,TICCNT MOV A,M SDP1: CMP M JZ SDP1 MOV A,M SDP2: INX D ANA A RC CMP M JZ SDP2 XCHG DAD B MOV C,L MOV B,H POP PSW DCR A JNZ SDP0 MOV A,B INR A ANI 006H RAR MOV B,A MVI A,WRITA CALL MCON STA WRITAL MVI A,WRITC CALL MCON STA WRITCL MVI A,WHDA CALL MCON STA WHDAL1 STA WHDAL2 MVI A,WHNA CALL MCON STA WHNAL MVI A,READA CALL MCON STA READAL MVI A,WSCA CALL MCON STA WSCAL CALL ONH17 MVI A,RETRIES STA ERRCNT LHLD HSTDPB LXI D,DPETRK-DPEHTH DAD D SHLD TRKPT MOV A,M INR A RNZ JMP STZ MCON: PUSH B MOV C,A XRA A MCON0: ADD C DCR B JNZ MCON0 POP B RET SDT: XRA A STA SIDE LHLD HSTDPB MOV A,M ANI DPE2S LDA HSTTRK JZ SDT0 RRC PUSH PSW RRC ANI 040H STA SIDE POP PSW ANI 7FH SDT0: STA TRACK JMP SDT2 SDT1: INR M CALL MAI LHLD HSTDPB MOV A,M ANI DPE48RO JZ SDT2 CALL MAI SDT2: LHLD TRKPT LDA TRACK CMP M JZ SDT3 JP SDT1 DCR M CALL MAO LHLD HSTDPB MOV A,M ANI DPE48RO JZ SDT2 CALL MAO JMP SDT2 SDT3: LDA CTLPRT PUSH H LXI H,SIDE ANI 0FFH-40H ORA M OUT H88CTL STA CTLPRT POP H LDA HSTTRK STA TRACK SDT4: LDA DLYW CPI HST RNC MVI A,HST STA DLYW RET STZ: MVI L,85 STZ0: IN DPDC ANI DFT0 JNZ STZ1 DCR L JZ STZ1 CALL MAO JMP STZ0 STZ1: LHLD TRKPT MVI M,0 JMP SDT4 MAI: MVI A,DFDI JMP MAO1 MAO: XRA A MAO1: PUSH H MOV H,A LDA DEVCTL ORA H OUT DPDC ORI DFST OUT DPDC XRI DFST OUT DPDC LHLD HSTDPB LXI D,5 DAD D MOV A,M ANI 07FH POP H CPI 00FH JNZ DLY INR A DLY: PUSH H LXI H,TICCNT ADD M DLY1: CMP M JNZ DLY1 POP H RET LPS0: CALL STS LPS: LDA DLYW ORA A JNZ LPS0 MVI B,LPSA LPS1: DI CALL WSC MVI A,D$E$HSY JC LPS2 CALL RDB CALL RDB LXI H,TRACK CMP M MVI A,D$E$TRK JNZ LPS2 CALL RDB INX H CMP M MVI A,D$E$RNF JNZ LPS2 MOV H,D CALL RDB CMP H RZ MVI A,D$E$HCK LPS2: PUSH PSW CALL STS POP PSW DCR B JNZ LPS1 STC RET STS: EI PUSH B IN DPDC RAR JC STS2 LXI H,TICCNT MOV B,M STS1: IN DPDC RAR JC STS2 MVI A,STSA ADD B CMP M JNZ STS1 JMP STS3 STS2: CALL WNH MVI A,STSB CALL DLY STS3: POP B DI WHD: IN DPDC RAR JNC WHD WHDAL2: EQU $+1 MVI A,WHDA JMP UDLY WNH: IN DPDC RAR JC WNH WHNAL: EQU $+1 MVI A,WHNA UDLY: DCR A JNZ UDLY RET RDB: IN UPST RAR JNC RDB IN UPDP MOV E,A XRA D RLC MOV D,A MOV A,E RET READAL: EQU $+1 WSC: MVI A,READA WSC0: DCR A JNZ WSC0 MVI A,DSYN OUT UPSC IN UPSR WSCAL: EQU $+1 MVI A,WSCA MOV D,A WSC1: IN DPDC ANI DFSD JNZ WSC2 DCR D JNZ WSC1 STC RET WSC2: IN UPDP MVI D,0 RET WSP: DCR A JNZ WSP LDA DEVCTL INR A OUT DPDC WSP1: XRA A CALL WNB DCR C JNZ WSP1 MVI A,DSYN MOV D,A WNB: MOV E,A WNB1: IN UPST ANA A JP WNB1 MOV A,E OUT UPDP XRA D RLC MOV D,A RET ENDIF IF H37T H37DVD: JMP SET37 JMP RD37 JMP WR37 JMP RESH37 JMP MNTH37 SET37: LXI H,0 SHLD HSTTRK XRA A STA HSTSEC DCR A STA SET37A CALL RDYH37 JC SET379 LHLD DPBX LXI D,DPETRK-DPEHTH DAD D MVI M,DPEUNK ENDIF IF H37ED AND (H37T) CALL RD37 JZ SET373 LHLD DPBX MOV A,M XRI DPEDD MOV M,A CALL RD37 JNZ SET379 SET373: ENDIF IF NOT (H37ED) AND (H37T) MVI A,FDCRDA LXI D,H37TMP CALL H37RD JZ SET373 LHLD DPBX MOV A,M XRI DPEDD MOV M,A LXI H,H37CTL MOV A,M XRI CONMFM MOV M,A OUT FD$CON MVI A,FDCRDA LXI D,H37TMP CALL H37RD JNZ SET379 SET373: LDA H37TMP+FDRASL CPI FDSL256 JNZ SET379 CALL RD37 JNZ SET379 ENDIF IF (H37T) CALL CHKLAB JZ SET373A LHLD DPBX MOV A,M ANI DPEDD JNZ SET379 MVI C,LABLEN-1 LXI D,HSTBUF+LABEL LXI H,DFTL37 CALL MOVEIT SET373A: LHLD DPBX MOV A,M ANI DPETYPE+DPE96T MOV B,A LXI D,HSTBUF+LABHTH+DPEFLAG-DPEHTH LDAX D ANI DPEED+DPEDD+DPE2S ORA B MOV M,A INX D INX D LDAX D INX H INX H MOV M,A INX D LDAX D INX H MOV M,A INX D INX D INX D LDAX D ANI 0FFH-DPEIMG MOV B,A INX H INX H INX H MOV A,M ANI DPEIMG ORA B MOV M,A ENDIF IF (DPEFLG2-DPERPAB-3) AND (H37T) %: (DPEFLG2-DPERPAB) NE 3 ENDIF IF (H37T) LDA HSTBUF+LABHTH+DPEFLAG-DPEHTH ANI DPE2S JZ SET374 MVI A,FDCRDA+FDFSS1 LXI D,H37TMP CALL H37RD JNZ SET379 LDA H37TMP+FDRASID CPI 1 JNZ SET379 SET374: MVI A,2 STA TRACK CALL SDT37 MVI A,FDCRDA LXI D,H37TMP CALL H37RD JNZ SET379 LDA H37TMP+FDRATRK CPI 2 JZ SET374D CPI 1 JNZ SET379 LHLD DPBX MOV A,M ORI DPE48RO MOV M,A SET374D: CALL RST37 SET375: LHLD SETDSKC LXI B,DPEDPB DAD B CALL HLIHL LXI D,HSTBUF+LABDPB MVI C,DPBL CALL MOVEITX XRA A SET378: MVI A,0 STA SET37A CALL H37DONE RET SET379: STC JMP SET378 DFTL37 DB LABVER DB DPEH37,0,2,8,0,0,0,0 DW 20 DB 3,7,0 DW 91,63,00C0H,16,3 SET37A DB 0 H37TMP DS FDRAL H37WAIT: POP H SHLD H37IRET MOV B,A MVI A,FD$CD OUT FD$INT MOV A,B OUT FD$CMD JMP $ H37RD: LXI H,H37RD2 SHLD H37IRET MOV B,A LDA H37CTL ORI CONDRQ OUT FD$CON MVI A,FD$CD OUT FD$INT MOV A,B LXI H,H37RD1 OUT FD$CMD H37RD1: HLT IN FD$DAT STAX D INX D PCHL H37RD2: PUSH PSW LDA H37CTL OUT FD$CON POP PSW ANA A RET H37DONE: PUSH PSW LDA SET37A ANA A JNZ H37DONE1 LXI H,H37CTL MOV A,M ANI 0FFH-CONIRQ OUT FD$CON MOV M,A LXI H,DELAY37 SHLD DLYMO37 H37DONE1: POP PSW RET RD37: CALL SDP37 RD370: CALL SDT37 LDA SIDE ORI FDCRDS+FDFSLF LXI D,HSTBUF CALL H37RD JZ RD373 CALL H37E JNC RD370 ORI 0FFH STA ERFLAG RD373: JMP H37DONE WR37: LHLD HSTDPB MOV A,M ANI DPE48RO MVI A,FDSWPV JNZ WR37E CALL SDP37 WR370: CALL SDT37 MVI A,FD$CD OUT FD$INT LDA H37CTL ORI CONDRQ OUT FD$CON LDA SIDE ORI FDCWRS+FDFSLF LXI H,WR372 SHLD H37IRET LXI H,WR371 LXI D,HSTBUF OUT FD$CMD WR371: LDAX D HLT OUT FD$DAT INX D PCHL WR372: CALL H37RD2 JZ WR373 WR37E: CALL H37E JNC WR370 ORI 0FFH STA ERFLAG WR373: JMP H37DONE H37E: STA ERRTYP ANI FDSNRD+FDSWPV JNZ H37E9 LDA SET37A ANA A JNZ H37E0 LHLD SECNT37 INX H SHLD SECNT37 H37E0: LXI H,ERRCNT DCR M JZ H37E9 MOV A,M CPI 6 JNC H37E1 SUI 6 H37E1: JNZ H37E2 CALL RST37 JMP H37E8 H37E2: CPI 4 JNZ H37E3 LXI H,TRACK DCR M CP SDT37 LXI H,TRACK INR M JMP H37E8 H37E3: CPI 2 JNZ H37E8 LHLD HSTDPB MOV A,M ANI DPE96T MVI A,79 JNZ H37E3A MVI A,39 H37E3A: LXI H,TRACK INR M CMP M CNC SDT37 LXI H,TRACK DCR M H37E8: XRA A RET H37E9: STC RET H37MSG DB 'H37',0 H37ISR: MVI A,10 H37ISR1: DCR A JNZ H37ISR1 IN FD$STA XTHL LHLD H37IRET XTHL EI RET SDP37: CALL ONH37 LDA SET37A ANA A MVI A,12 JZ SDP371 MVI A,4 SDP371: STA ERRCNT LDA HSTTRK STA TRACK MVI B,0 LHLD HSTDPB MOV A,M ANI DPE2S JZ SDP374 LXI H,TRACK MOV A,M ANA A RAR MOV M,A JNC SDP374 MVI B,FDFSS1 SDP374: MOV A,B STA SIDE LDA HSTSEC INR A STA SECTOR LHLD HSTDPB LXI D,DPETRK-DPEHTH DAD D SHLD TRKPT MOV A,M RAL JC RST37 MVI A,FD$TS OUT FD$INT MOV A,M OUT FD$TRK RET ONH37: LXI H,0 SHLD DLYMO37 LHLD HSTDPB MOV A,M ANI DPEDD JZ ONH37A MVI A,CONMFM ONH37A: INX H ORA M ORI CONMO+CONIRQ OUT FD$CON MOV B,A LXI H,H37CTL MOV A,M ANI CONMO JNZ ONH37B PUSH H LHLD HSTDPB LXI D,DPESEK-DPEHTH DAD D MOV A,M POP H RAL ENDIF IF DPEMO-10000000B AND (H37T) %: DPEMO NE 10000000B ENDIF IF (H37T) MVI A,(1000+3)/4+1 JNC ONH37C RAR RAR ANI 03FH JMP ONH37C ONH37B MOV A,M ANI CONDS0+CONDS1+CONDS2+CONDS3 ANA B MVI A,0 JNZ ONH37C MVI A,(50+3)/4+1 ONH37C: STA DLYW MOV M,B RET RST37: CALL WBS37 LHLD TRKPT MVI M,0 INX H ENDIF IF (DPETRK+1)-DPESEK AND (H37T) %: DPESEK NE (DPETRK+1) ENDIF IF (H37T) MOV A,M ANI 0FFH-DPEMO ORI FDCRST JMP H37WAIT MNTH37: LHLD HSTDPB LXI D,DPETRK-DPEHTH DAD D MVI M,DPEUNK ; JMP RESH37 RESH37: MVI A,FD$CD OUT FD$INT MVI A,FDCFI+FDFINI OUT FD$CMD XRA A OUT FD$CON STA H37CTL LXI H,0 SHLD DLYMO37 SHLD H37IRET IN FD$DAT MVI A,10 RESH371: DCR A JNZ RESH371 IN FD$STA RET SDT37: LHLD TRKPT MOV A,M LXI H,TRACK CMP M JZ SDT372 CALL WBS37 MOV A,M CALL SDT376 LHLD HSTDPB MOV A,M ANI DPE48RO JZ SDT371 MVI A,FD$TS OUT FD$INT LHLD TRKPT MOV A,M OUT FD$TRK LDA TRACK CALL SDT376 SDT371: MVI A,FD$TS OUT FD$INT LDA TRACK OUT FD$TRK LHLD TRKPT MOV M,A MVI A,(15+3)/4+1 LXI H,DLYW CMP M JC SDT372 MOV M,A SDT372: MVI A,FD$TS OUT FD$INT LDA SECTOR OUT FD$SEC SDT373: LDA DLYW ORA A JNZ SDT373 RET SDT376: MOV B,A MVI A,FD$CD OUT FD$INT MOV A,B OUT FD$DAT LHLD TRKPT INX H MOV A,M ANI 0FFH-DPEMO ORI FDCSEK+FDFHLB JMP H37WAIT RDYH37: CALL ONH37 LXI H,DLYW RDYH37A: MOV A,M ANA A JNZ RDYH37A MVI A,FD$CD OUT FD$INT MVI A,FDCFI+FDFINI OUT FD$CMD MVI A,10 RDYH37B: DCR A JNZ RDYH37B LXI H,TICCNT MVI A,200 ADD M MOV B,A MVI C,0 MOV D,C RDYH37C: IN FD$STA ANI FDSIND CMP D JZ RDYH37D MOV D,A INR C MVI A,FDHDD RDYH37C1: DCR A JNZ RDYH37C1 RDYH37D: MOV A,B CMP M JNZ RDYH37C MOV A,C CPI 1*2 JC RDYH37E CPI 3*2+1 CMC JNC RDYH37F RDYH37E: MVI A,FDSNRD CALL H37E RDYH37F: JMP H37DONE WBS37: MVI A,150 WBS371: DCR A JNZ WBS371 RET ENDIF IF H47T H47DVD: JMP SETD47 JMP RD47 JMP WR47 JMP RESH47 XRA A ! RET ! NOP H47PMS: DW XLT0S,DPB0SS DB 0,1,8 DW XLT0S,DPB0SD DB DPE2S,1,16 DW XLT0D,DPB0DS DB DPEDD,2,16 DW XLT0D,DPB0DD DB DPEDD+DPE2S,2,16 ENDIF IF H47ED AND (H47T) DW 0,DPB0ES DB DPEED+DPEDD,8,16 DW 0,DPB0ED DB DPEED+DPEDD+DPE2S,8,16 ENDIF IF (H47T) SETD47: MVI A,DRAS CALL WCD LHLD DPBX INX H MOV A,M ORI 001H CALL WBD CALL W4TR CALL H47IND PUSH PSW ANI 03H CPI 2 ENDIF IF H47ED AND (H47T) JC SETD1 MVI A,2 ENDIF IF NOT (H47ED) AND (H47T) JNC SETD9 ENDIF IF (H47T) SETD1: ADD A MOV D,A POP PSW ANI 10H MOV A,D JZ SETD2 ORI 1 SETD2: MOV B,A ADD A ADD B ADD A ADD B LXI H,H47PMS CALL DADA XCHG LHLD SETDSKC LDAX D MOV M,A INX D INX H LDAX D MOV M,A INX D PUSH D LXI D,DPEDPB-1 DAD D POP D LDAX D MOV M,A INX D INX H LDAX D MOV M,A INX D LHLD DPBX MOV A,M ANI 0FFH-DPEED-DPEDD-DPE2S MOV B,A LDAX D ORA B MOV M,A INX D INX H INX H LDAX D MOV M,A INX D INX H LDAX D MOV M,A XRA A RET ENDIF IF NOT H47ED AND (H47T) SETD9: STC RET ENDIF IF (H47T) RESH47: MVI A,DCRES CALL H47OUTC CALL W4DONE XRA A CALL H47OUTC RET RD47: MVI A,DRD CALL SET47 JC RDERR RDH3: CALL H47INS ANI DSTR+DSDONE+DSERR JZ RDH3 ANI DSDONE+DSERR JNZ RDH4 CALL H47IND MOV M,A INX H JMP RDH3 RDH4: CALL H47INS ANI DSERR RZ RDERR: ER47: MVI A,DRS CALL WCD CALL W4TR CALL H47IND STA ERRTYP CALL RESH47 MVI A,0FFH STA ERFLAG RET H47MSG DB 'H47',0 WR47: MVI A,DWR CALL SET47 JC WRERR CALL H47INS ANI DSERR JNZ WRERR WRH3: CALL H47INS ANI DSTR+DSDONE+DSERR JZ WRH3 ANI DSDONE+DSERR JNZ WRH4 MOV A,M CALL H47OUTD INX H JMP WRH3 WRH4: CALL H47INS ANI DSERR RZ WRERR: JMP ER47 SET47: CALL WCD RC LHLD HSTDPB MOV A,M RAR ENDIF IF DPE2S-1 AND (H47T) %: DPE2S NE 1 ENDIF IF (H47T) MVI A,0 STA SIDE LDA HSTTRK JNC SET472 RRC PUSH PSW ANI 080H STA SIDE POP PSW ANI 07FH SET472: CALL WBD RC LHLD HSTDPB INX H LDA HSTSEC INR A ORA M LXI H,SIDE ORA M CALL WBD RC LXI H,HSTBUF RET WCD: CALL W4DONE RC CALL H47OUTD CALL W4ND RET WBD: CALL W4TR RC CALL H47OUTD RET W4DONE: PUSH PSW PUSH B LXI B,0FFFFH W4D1: CALL H47INS ANI DSDONE JNZ W4D2 DCX B MOV A,B ORA C JNZ W4D1 POP B POP PSW STC RET W4D2: POP B POP PSW ORA A RET W4ND: PUSH PSW W4ND1: CALL H47INS ANI DSDONE JNZ W4ND1 POP PSW RET W4TR: PUSH PSW W4TR1: CALL H47INS ANI DSDONE+DSTR JZ W4TR1 ANI DSDONE JNZ W4TR2 POP PSW ORA A RET W4TR2: POP PSW STC RET H47INS: IN 78H H47INS1 EQU $-1 RET H47OUTC: OUT 78H H47OUTC1 EQU $-1 RET H47IND: IN 79H H47IND1 EQU $-1 RET H47OUTD: OUT 79H H47OUTD1 EQU $-1 RET ENDIF IF XEBT XEBDVD: JMP XEBLOG JMP XEBRD JMP XEBWR JMP XEBRES JMP XEBMNT XEBRES: XEBMNT: XRA A RET XEBLOG: EQU $ LHLD DPBX MOV A,M CMA ANI DPEASGN STC RNZ XRA A STA HSTSEC LXI H,0 SHLD HSTTRK CALL XEBRD RC CALL CHKLAB STC RNZ LHLD DPBX LXI D,DPETRK-DPEHTH DAD D CALL HLIHL XCHG LHLD HSTBUF+LABHTH+DPETRK-DPEHTH CALL CPHLDE STC RNZ LHLD DPBX LXI D,DPEUPB-DPEHTH DAD D CALL HLIHL XCHG LHLD HSTBUF+LABHTH+DPEUPB-DPEHTH CALL CPHLDE STC RNZ LHLD DPBX INX H INX H MVI M,2 INX H LDA HSTBUF+LABHTH+DPERPAB-DPEHTH MOV M,A LHLD SETDSKC LXI D,DPEDPB DAD D CALL HLIHL LXI D,HSTBUF+LABDPB XCHG LXI B,DPBL DB 0EDH,0B0H XRA A RET XEBRD: EQU $ CALL GETIDC JC XEERR CALL XECAS JC XEERR LXI D,HSTBUF CALL SARD RNC JMP XEERR XEBWR: EQU $ LHLD HSTDPB MOV A,M ANI DPE48RO JNZ XEERR CALL GETIDC JC XEERR CALL XECAS JC XEERR LXI D,HSTBUF CALL SAWR RNC JMP XEERR XEERR: EQU $ MVI A,0FFH STA ERFLAG ORA A STC RET GETIDC: EQU $ LHLD HSTDPB INX H MOV A,M RLC RLC RLC ANI 00000001B MOV C,A MOV A,M ANI 003H ADD A ADD C MOV C,A ADD A ADD A ADD A ADD C MOV E,A MVI D,0 LXI H,IDCTBL DAD D SHLD IDCPTR MOV A,M INX H ORA M JNZ GETIDC1 LXI H,1 MVI A,1 STA SACNTB XRA A STA SACTLB LXI D,HSTBUF CALL SARD STC RNZ LHLD IDCPTR LXI D,HSTBUF+PTPTBL-1 MVI C,9 GETIDC0:EQU $ LDAX D MOV M,A INX H DCX D DCR C JNZ GETIDC0 GETIDC1:EQU $ LHLD IDCPTR LXI D,IDCBUF LXI B,9 DB 0EDH,0B0H CALL SAIDC LDA XECTLB STA SACTLB XRA A RET XECAS: EQU $ LHLD HSTTRK DAD H DAD H DAD H DAD H DAD H LDA HSTSEC MOV E,A MVI D,0 DAD D PUSH H LHLD HSTDPB LXI D,DPEUPB-DPEHTH DAD D CALL HLIHL CALL CYLSEC POP D PUSH D CALL CPHLDE JC XECASE LHLD HSTDPB LXI D,DPELPB-DPEHTH DAD D CALL HLIHL CALL CYLSEC MOV C,A POP D DAD D MVI A,0 ADC C ANA A RET XECASE: EQU $ POP PSW MVI A,021H STA ERRTYP STC RET CYLSEC: EQU $ LDA XEHDS XCHG LXI H,0 MVI C,8 CYLS0: EQU $ DAD H RLC JNC CYLS1 DAD D CYLS1: EQU $ DCR C JNZ CYLS0 MVI C,5 XRA A CYLS2: EQU $ DAD H RAL DCR C JNZ CYLS2 RET IDCPTR: DW 0 IDCTBL: EQU $ DB 0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0 IDCBUF: EQU $ DB 0,0 XEHDS: DB 0 DB 0,0,0,0,0 XECTLB: DB 0 SARD: EQU $ PUSH D MVI C,SARDC CALL SASCB CALL SASCMD RC POP H MVI A,128 STA SARDCNT SARD0: EQU $ CALL SASTAI ANA A JP SARD0 ANI SACMD JNZ SACKS SARDCNT:EQU $+1 MVI B,0 LDA SADATI+1 MOV C,A DB 0EDH,0B2H JMP SARD0 SAWR: EQU $ PUSH D MVI C,SAWRC CALL SASCB CALL SASCMD RC POP H MVI A,128 STA SAWRCNT SAWR0: EQU $ CALL SASTAI ANA A JP SAWR0 ANI SACMD JNZ SACKS SAWRCNT:EQU $+1 MVI B,0 LDA SADATI+1 MOV C,A DB 0EDH,0B3H JMP SAWR0 SAIDC: EQU $ MVI C,SAIDCC XRA A CALL SASCB CALL SASCMD RC LXI H,IDCBUF MVI A,8 STA SAWRCNT JMP SAWR0 SAHOME: EQU $ MVI C,SAHOMC XRA A CALL SASCB CALL SASCMD RC JMP SACKS SARS: EQU $ MVI A,0FFH STA SARSFLG MVI C,SARSC XRA A CALL SASCB CALL SASCMD JC SARS0 LXI H,SARSBUF MVI A,6 STA SARDCNT CALL SARD0 JC SARS1 LDA SARSBUF ANI 03FH SARS1: EQU $ STA ERRTYP SARS0: EQU $ PUSH PSW XRA A STA SARSFLG POP PSW RET SASCB: EQU $ XCHG MOV B,A LHLD HSTDPB INX H MOV A,M ANI 0E0H ORA B LXI H,SACBUF MOV M,C INX H MOV M,A INX H MOV M,D INX H MOV M,E RET SASCMD: EQU $ XRA A CALL SADATO LXI H,TICCNT+1 MOV A,M ADI 10 MOV B,A SASCMD0:EQU $ CALL SASTAI ANI SABUSY JZ SASCMD1 MOV A,M CMP B JNZ SASCMD0 SASCMDE:EQU $ MVI A,0FFH STA ERRTYP STC RET SASCMD1:EQU $ PUSH H LHLD HSTDPB INX H MOV A,M ANI 003H CALL SASELO POP H MVI A,SASEL CALL SACTLO SASCMD2:EQU $ CALL SASTAI ANI SABUSY JNZ SASCMD3 MOV A,M CMP B JNZ SASCMD2 JMP SASCMDE SASCMD3:EQU $ XRA A CALL SACTLO DI LXI H,SACBUF LDA SADATI+1 MOV C,A SASCMD4:EQU $ CALL SASTAI ANI SAREQ+SACMD+SAIO JP SASCMD4 SUI SAREQ+SACMD+SAIO ANA A RNZ DB 0EDH,0A3H JMP SASCMD4 SACKS: EQU $ CALL SADATI PUSH PSW SACKS0: EQU $ CALL SASTAI ANA A JP SACKS0 CALL SADATI EI XRA A CALL SADATO POP PSW ANI SAFERR RZ LDA SARSFLG ORA A STC RNZ CALL SARS CPI SAECCE RZ STC RET SARSFLG:DB 0 SARSBUF:EQU $ DB 0,0,0,0,0,0,0,0 SACBUF: EQU $ SACMDB: DB 0 SAADD2: DB 0 SAADD1: DB 0 SAADD0: DB 0 SACNTB: DB 1 SACTLB: DB 0 SADATI: EQU $ IN '.' RET SADATO: EQU $ OUT '.' RET SASTAI: EQU $ IN '.' RET SACTLO: EQU $ OUT '.' RET SASELO: EQU $ OUT '.' RET ENDIF NULDVD: JMP SETNUL JMP RDNUL JMP WRNUL JMP RESNUL JMP MNTNUL SETNUL: RDNUL: WRNUL: RESNUL: MNTNUL: MVI A,0FFH STA ERFLAG STC RET IF TOD NDAYS DB 31,28,31,30,31,30,31,31,30,31,30,31 ENDIF TODVAL DB 0,0,0,0,0,0 EVTCTR DW 0 DLYMO: DB 0 DLYH: DB 0 DLYW: DB 0 CLOCK: SHLD HSAV POP H SHLD RETSAV PUSH PSW LXI H,CTLPRT MOV A,M OUT H88CTL INX H MOV A,M ORA A JZ CLK0 OUT H8CTL CLK0: LHLD TICCNT INX H SHLD TICCNT MOV A,L ORA A JNZ CLKRET IF TOD MOV A,H RAR JC CLK1 LXI H,TODVAL INR M MOV A,M CPI 60 JC CLK1 MVI M,0 INX H INR M MOV A,M CPI 60 JC CLK1 MVI M,0 INX H INR M MOV A,M CPI 24 JC CLK1 MVI M,0 INX H INX H MOV A,M LXI H,NDAYS-1 ADD L MOV L,A MOV A,H ACI 0 MOV H,A MOV A,M LXI H,TODVAL+3 INR M CMP M JNC CLK1 MVI M,1 INX H INR M MOV A,M CPI 13 JC CLK1 MVI M,1 INX H INR M ENDIF CLK1: IF EVENT LHLD EVTCTR MOV A,H ORA L JZ CLK2 DCX H SHLD EVTCTR ENDIF CLK2: IF H17T LXI H,DLYMO MOV A,M ORA A JZ CLK4 DCR M JNZ CLK3 LDA DEVCTL ANI 0FFH-DFMO STA DEVCTL OUT DPDC CLK3: INX H MOV A,M ORA A JZ CLK4 DCR M JNZ CLK4 LDA DEVCTL ANI 0FFH-U0-U1-U2 STA DEVCTL OUT DPDC ENDIF CLK4: IF H37T LXI H,DLYMO37 MOV A,M ORA A JZ CLKRET DCR M JNZ CLK5 LDA H37CTL ANI 0FFH-CONMO STA H37CTL OUT FD$CON CLK5: INX H MOV A,M ORA A JZ CLKRET DCR M JNZ CLKRET LDA H37CTL ANI 0FFH-CONDS0-CONDS1-CONDS2-CONDS3 STA H37CTL OUT FD$CON ENDIF CLKRET: LDA TICCNT RAR JC CLKR2 LXI H,DLYW MOV A,M ORA A JZ CLKR2 DCR M CLKR2: POP PSW LHLD RETSAV PUSH H LHLD HSAV EI RET CHKLAB: XRA A MVI B,LABLEN LXI H,HSTBUF+LABEL CHKLAB1: ADD M INX H DCR B JNZ CHKLAB1 INR A RET CPHLDE: MOV A,H CMP D RNZ MOV A,L CMP E RET DADA: ADD L MOV L,A RNC INR H RET GETDPE: ANI 0FH MOV L,A MVI H,0 MOV D,H MOV E,L DAD H DAD D DAD H DAD H DAD H IF DPEL-24 %: DPEL NE 24 ENDIF LXI D,DPBASE DAD D RET GETDPEX: CALL GETDPE LXI D,DPEHTH DAD D RET HLIHL: MOV A,M INX H MOV H,M MOV L,A RET MOVEITX: XCHG IF $-MOVEIT %: MOVEIT MUST IMMEDIATELY FOLLOW MOVEITX ENDIF MOVEIT: MVI A,81H ADI 80H JPO MOVEIT1 MVI B,0 DB 0EDH,0B0H RET MOVEIT1: MOV A,M STAX D INX H INX D DCR C JNZ MOVEIT1 RET CONST: CALL CONS ORA A RZ MVI A,0FFH RET CONS: LDA IOBYTE CALL INDXIT DW TTYSTAT DW CRTSTAT DW RDRST DW CRTSTAT RDRST: LDA IOBYTE RRC CALL GOTOIT DW TTYSTAT DW BUSY DW MDSTAT DW CRTSTAT CONIN: LDA IOBYTE CALL INDXIT DW TTYIN DW CRTIN DW READER DW CRTIN CONOUT: LDA IOBYTE CALL INDXIT DW TTYOUT DW CRTOUT DW LIST DW LIST LISTST: LDA IOBYTE RLC RLC CALL INDXIT DW TTYOS DW CRTOS DW LPTOS DW DBDOS LIST: LDA IOBYTE RLC RLC CALL INDXIT DW TTYOUT DW CRTOUT DW LPTOUT DW DBD PUNCH: LDA IOBYTE RRC RRC RRC CALL GOTOIT DW TTYOUT DW DMYOUT DW MDOUT DW CRTOUT READER: LDA IOBYTE RRC CALL GOTOIT DW TTYIN DW DMYIN DW MDIN DW CRTIN INDXIT: RLC GOTOIT: ANI 06H XTHL CALL DADA CALL HLIHL XTHL RET CRTSTAT: IF NOT INTINP LDA MODE RAR JC CRTS1 ENDIF IF MODEB0-1 AND (NOT INTINP) %: MODEB0 NE 1 ENDIF IF (NOT INTINP) LXI H,H84PT1 JMP US CRTS1: IN H85CRT+1 ANI 02H RET ENDIF IF INTINP LDA CRTB ORA A RNZ CRTS2: LDA MODE RAR JNC CRTS2A ENDIF IF MODEB0-1 AND (INTINP) %: MODEB0 NE 1 ENDIF IF (INTINP) IN H85CRT+1 ANI 04H JZ CRTS3 MVI A,17H OUT H85CRT+1 JMP CRTS3 CRTS2A: LDA H84PT1 INR A STA CRTS2B MVI A,1 OUT 0 CRTS2B EQU $-1 CRTS3: EI XRA A RET ENDIF CRTIN: IF NOT INTINP LDA MODE RAR JC CRTI1 ENDIF IF MODEB0-1 AND (NOT INTINP) %: MODEB0 NE 1 ENDIF IF (NOT INTINP) LXI H,H84PT1 CALL UI ANI 7FH RET CRTI1: IN H85CRT+1 ANI 02H JZ CRTI1 IN H85CRT ANI 7FH RET ENDIF IF INTINP CRTIN1: CALL CRTSTAT JZ CRTIN1 DI LXI H,CRTB DCR M LHLD CRTGET MOV C,M INX H MOV A,L PUSH B LXI B,CRTBND CMP C POP B JNZ CRTIN2 LXI H,CRTBUF CRTIN2: SHLD CRTGET EI MOV A,C RET CRTISR: SHLD HSAV POP H SHLD RETSAV PUSH PSW LXI H,0 DAD SP SHLD OLDSP LXI SP,LCLSTK LXI H,H84PT1 MVI A,2 CALL IPINX CPI 0100B JNZ CRTIS6 ENDIF IF BRKKEY AND (INTINP) MVI A,5 CALL IPINX ANI 10H JNZ CRTIS8 ENDIF IF (INTINP) CALL IUI1 CRTIS1: ANI 7FH PUSH PSW LDA CRTB CPI CRTLEN-4 JC CRTIS2 LDA MODE RAR ENDIF IF MODEB0-1 AND (INTINP) %: MODEB0 NE 1 ENDIF IF (INTINP) JNC CRTIS1B CRTIS1A: IN H85CRT+1 RAR JNC CRTIS1A MVI A,H85CRT JMP CRTIS1C CRTIS1B: MVI A,5 LXI H,H84PT1 CALL IPINX ANI 20H JZ CRTIS1B MOV A,M CRTIS1C: STA CRTIS1D MVI A,BELL OUT 0 CRTIS1D EQU $-1 LDA CRTB CPI CRTLEN JZ CRTIS5 CRTIS2: POP PSW LHLD CRTPUT MOV M,A INX H MOV A,L PUSH B LXI B,CRTBND CMP C POP B JNZ CRTIS3 LXI H,CRTBUF CRTIS3: SHLD CRTPUT LXI H,CRTB INR M CRTIS4: LHLD OLDSP SPHL POP PSW LHLD RETSAV PUSH H LHLD HSAV EI RET CRTIS5: POP PSW JMP CRTIS4 CRTIS6: IN H85CRT+1 ENDIF IF BRKKEY AND (INTINP) ANI 20H JNZ CRTI11 ENDIF IF (INTINP) IN H85CRT JMP CRTIS1 ENDIF IF BRKKEY AND (INTINP) CRTIS8: CALL IUI1 LXI D,6000 CRTIS9: MVI A,5 CALL IPINX ANI 9 JNZ CRTIS8 DCX D MOV A,D ORA E JNZ CRTIS9 CALL IUI1 CRTI10: LXI H,CRTBUF SHLD CRTGET SHLD CRTPUT XRA A STA CRTB ENDIF IF H17T AND (BRKKEY) AND (INTINP) CALL RESH17 ENDIF IF (BRKKEY) AND (INTINP) ENDIF IF H37T AND (BRKKEY) AND (INTINP) CALL RESH37 ENDIF IF (BRKKEY) AND (INTINP) ENDIF IF H47T AND (BRKKEY) AND (INTINP) CALL RESH47 ENDIF IF (BRKKEY) AND (INTINP) ENDIF IF XEBT AND (BRKKEY) AND (INTINP) CALL XEBRES ENDIF IF (BRKKEY) AND (INTINP) CALL FLUSH1 EI JMP BOOT CRTI11: IN H85CRT MVI A,17H OUT H85CRT+1 LXI D,6000 CRTI12: IN H85CRT+1 ANI 22H JNZ CRTI11 DCX D MOV A,D ORA E JNZ CRTI12 IN H85CRT JMP CRTI10 ENDIF IF (INTINP) IUI1: XRA A IPINX: ADD M IPIN: STA IPIN1+1 IPIN1: IN 00H RET ENDIF CRTOUT: CALL CRTOS ORA A JZ CRTOUT LDA MODE RAR JC CRTO1 IF MODEB0-1 %: MODEB0 NE 1 ENDIF JMP UO CRTO1: PUSH H INX H INX H MOV A,M RAL POP H MOV A,C CC MUC OUT H85CRT JMP POUT2 TTYIN: LXI H,H84PT2 IF BIOS04 LDA MODE2 ANI MODE2B0 JNZ TTYIN1 ENDIF CALL UI IF BIOS04 JMP TTYIN2 TTYIN1: LXI H,H11PT2 CALL EPI ENDIF TTYIN2: ANI 07FH RET TTYSTAT:LXI H,H84PT2 IF BIOS04 LDA MODE2 ANI MODE2B0 JZ US LXI H,H11PT2 JMP EPS ENDIF IF BIOS03 JMP US ENDIF TTYOUT: CALL TTYOS ORA A JZ TTYOUT IF BIOS04 LDA MODE2 ANI MODE2B0 JNZ EPO ENDIF JMP UO LPTOUT: LDA DCLPOS ORA A JNZ LPTOU2 LPTOU1: CALL LPTOS ORA A JZ LPTOU1 LPTOU2: LXI H,H84PT3 LXI D,LPTCTS XRA A STA DCLPOS IF BIOS04 LDA MODE2 ANI MODE2B1+MODE2B0 CPI MODE2B1+MODE2B0 JNZ UO LXI H,H11PT3 JMP PPO ENDIF IF BIOS03 JMP UO ENDIF DBD: CALL DBDOS ORA A JZ DBD CALL UO LXI H,HSCNT DCR M CPI 01BH MOV A,M JNZ DBD1 CPI 2 RNC MVI M,2 RET DBD1: ORA A RNZ MVI A,1 STAX D RET HSCNT: DB 32 MDIN: LXI H,H84PT4 IF BIOS04 LDA MODE2 ANI MODE2B0 JNZ DMYIN ENDIF JMP UI MDSTAT: LXI H,H84PT4 IF BIOS04 LDA MODE2 ANI MODE2B0 JNZ BUSY ENDIF JMP US MDOUT: IF BIOS04 LDA MODE2 ANI MODE2B0 JNZ DMYOUT ENDIF MDOUT1: CALL MDOS ORA A JZ MDOUT1 JMP UO MDOS: LXI H,H84PT4 LXI D,MDCTS JMP CRTOS1 TTYOS: LXI H,H84PT2 LXI D,TTYCTS IF BIOS04 LDA MODE2 ANI MODE2B0 JZ CRTOS1 LXI H,H11PT2 CALL EPOS JMP CRTOS1A ENDIF IF BIOS03 JMP CRTOS1 ENDIF CRTOS: LXI H,H84PT1 LXI D,CRTCTS LDA MODE RAR JC CRTOS3 CRTOS1: CALL UOS CRTOS1A: JZ CRTOSB LDAX D ORA A JNZ CRTOS2 DCR A RET CRTOS2: DCR A STAX D PUSH B MVI C,NULL CALL UO POP B CRTOSB: XRA A RET CRTOS3: IN H85CRT+1 RAR JNC CRTOSB LDAX D ORA A JNZ CRTOS4 DCR A RET CRTOS4: DCR A STAX D MVI A,NULL OUT H85CRT XRA A RET LPTOS: LXI D,LPTCTS IF BIOS04 LDA MODE2 ANI MODE2B1+MODE2B0 CPI MODE2B1+MODE2B0 JNZ LPTOS3 LXI H,H11PT3 MVI A,PPDATC CALL PINX MOV B,A LDA MODE2 ANI MODE2B2 MOV A,B JNZ LPTOS5 CMA LPTOS5: ANI PPRDY JZ LPTOSB JMP LPTOS2 ENDIF LPTOS3: LXI H,H84PT3 CALL UOS JZ LPTOSB MVI A,6 CALL PINX MOV B,A LDA MODE ANI MODEB2 JNZ LPTOS0 MOV A,B CMA MOV B,A LPTOS0: LDA PRTRDY ANA B JZ LPTOSB LPTOS2: LDAX D ORA A JNZ LPTOS1 DCR A STA DCLPOS RET LPTOS1: DCR A STAX D PUSH B MVI C,NULL IF BIOS04 LDA MODE2 ANI MODE2B1+MODE2B0 CPI MODE2B1+MODE2B0 JNZ LPTOS4 CALL PPO JMP LPTOS4A ENDIF LPTOS4: CALL UO LPTOS4A: POP B LPTOSB: XRA A RET DBDOS: LXI H,H84PT3 LXI D,DBDCTS LDAX D CPI 2 JNZ DBDOS1 CALL US JZ DBDOSB CALL UI1 ANI 07FH SUI 'F' MOD 32 JNZ DBDOSB STAX D MVI A,32 STA HSCNT DBDOS1: CALL UOS JZ DBDOSB LDAX D ORA A JNZ DBDOS2 DCR A RET DBDOS2: INR A STAX D PUSH B MVI C,'C' MOD 32 CALL UO POP B BUSY: DBDOSB: XRA A RET DMYIN: MVI A,'Z'-40H DMYOUT: RET US: MVI A,5 CALL PINX ANI 1 RET UOS: MVI A,5 CALL PINX ANI 20H RET UO: MOV A,M POUT: STA POUT1+1 PUSH H INX H INX H MOV A,M RAL POP H MOV A,C CC MUC POUT1: OUT 00H POUT2: CPI PADCH RNZ PUSH H INX H INX H MOV A,M POP H RAR RAR RAR RAR ANI 07H RZ STAX D RET UI: CALL US JZ UI UI1: XRA A PINX: ADD M PIN: STA PIN1+1 PIN1: IN 00H RET IF SPD4M ; INCLUDE IF USING 2/4 MHZ MOD CHG2M: PUSH PSW ; SET 2MHZ SPEED LDA CTLPRT STA CHGSM ANI 0EFH ; MASK OUT 4MHZ SPEED BIT - BIT 4 STA CTLPRT OUT H88CTL POP PSW RET CHG4M: PUSH PSW ; RETURN TO 4MHZ OPERATION LDA CHGSM STA CTLPRT OUT H88CTL POP PSW RET CHGSM: DB 0 ENDIF ; END OF SPD4M CONDITIONAL IF BIOS04 EPS: MVI A,EPSTAT CALL PINX ANI EPRXR RET EPOS: MVI A,EPSTAT CALL PINX ANI EPTXR RET EPI: CALL EPS JZ EPI EPI1: MVI A,EPDATA JMP PINX EPO: MOV A,M JMP POUT PPO: MOV A,M CALL POUT MOV A,M ADI PPCTL STA PPO1A XRA A CALL PPO1 MVI A,PPDS PPO1: OUT 0 PPO1A EQU $-1 RET ENDIF MUC: CPI 'a' RC CPI 'z'+1 RNC SUI 'a'-'A' RET PMSG: MOV A,M ORA A RZ MOV C,A PUSH H CALL CONOUT POP H INX H JMP PMSG HOUT: PUSH PSW RRC RRC RRC RRC CALL NIBBLE POP PSW NIBBLE: ANI 0FH CPI 10 JM NIBBL1 ADI 7 NIBBL1: ADI 30H MOV C,A JMP CONOUT BTMSG: DB CR,LF DB 'ERROR DURING WARM BOOT - PRESS ANY KEY',0 RDMSG: DB ' READ',0 WRMSG: DB ' WRITE',0 ERRMSG: DB ' ERROR ',0 CRLF: DB CR,LF,0 DCLPOS: DB 0 TTYCTS: DB 0 CRTCTS: DB 0 LPTCTS: DB 0 MDCTS: DB 0 DBDCTS: DB 0 IF INTINP CRTB: DB 0 CRTGET: DW CRTBUF CRTPUT: DW CRTBUF ENDIF IF H17T DPB17S: DW 20 DB 3 DB 7 DB 0 DW 91 DW 63 DB 192 DB 0 DW 16 DW 3 DPB17X: DW 20 DB 3,7,0 DW 191 DW 63 DB 192 DB 0 DW 16 DW 3 DPB17D: DW 20 DB 4,15,1 DW 195 DW 127 DB 192 DB 0 DW 32 DW 3 ENDIF IF H47T DPB0SS: DW 26 DB 3,7,0 DW 242 DW 63 DB 192,0 DW 16 DW 2 DPB0SD: DW 26 DB 4,15,1 DW 246 DW 127 DB 0C0H,000H DW 32 DW 2 DPB0DS: DW 52 DB 4,15,0 DW 242 DW 127 DB 0C0H,000H DW 32 DW 2 DPB0DD: DW 52 DB 4,15,0 DW 493 DW 255 DB 0F0H,000H DW 64 DW 2 ENDIF IF H47T AND H47ED DPB0ES: DW 64 DB 4,15,0 DW 299 DW 127 DB 0C0H,000H DW 32 DW 2 DPB0ED: DW 64 DB 4,15,0 DW 607 DW 255 DB 0F0H,000H DW 64 DW 2 ENDIF IF H17T XLT17: DB 1,2,9,10,17,18 DB 5,6,13,14 DB 3,4,11,12,19,20 DB 7,8,15,16 ENDIF IF H47T XLT0S: DB 1,7,13,19,25 DB 5,11,17,23 DB 3,9,15,21 DB 2,8,14,20,26 DB 6,12,18,24 DB 4,10,16,22 XLT0D: DB 1,2,19,20,37,38 DB 3,4,21,22,39,40 DB 5,6,23,24,41,42 DB 7,8,25,26,43,44 DB 9,10,27,28,45,46 DB 11,12,29,30,47,48 DB 13,14,31,32,49,50 DB 15,16,33,34,51,52 DB 17,18,35,36 ENDIF HSTACT DB 0 HSTWRT DB 0 UNACNT DB 0 HSTBUF EQU $ CBOOT: DI LXI SP,STACK LDA DEFIOB STA IOBYTE MVI A,MI$JMP LXI H,CLOCK STA CLKVEC SHLD CLKVEC+1 IF INTINP LXI H,CRTISR STA SERVEC SHLD SERVEC+1 ENDIF LXI H,CTLPRT MOV A,M OUT H88CTL INX H MOV A,M ORA A JZ CBT0 MVI A,H8TR MOV M,A OUT H8CTL CBT0: LDA MODE ANI 0FFH-MODEB0 STA MODE LDA H8FLAG ORA A JZ CBT1 LXI H,H84PT1 MOV A,M ADI 3 STA OUTH84+1 PUSH PSW MVI A,3 CALL OUTH84 POP PSW CALL PIN CPI 3 JZ CBT1 LDA MODE ORI MODEB0 STA MODE MVI A,15H OUT H85CRT+1 MVI A,40H OUT H85CRT+1 MVI A,4EH OUT H85CRT+1 IF INTINP MVI A,17H ENDIF IF NOT (INTINP) MVI A,15H ENDIF OUT H85CRT+1 CBT1: LHLD CRTBAUD LDA H84PT1 CALL IN8250 IF INTINP LDA H84PT1 INR A STA OUTH84+1 MVI A,1 CALL OUTH84 ENDIF IF BIOS04 LDA H11PT2 MOV B,A ADI EPCMD STA OUTH84+1 MVI A,EPDTR CALL OUTH84 LXI H,H11PT2 MVI A,EPCMD CALL PINX CPI EPDTR JNZ H893 XRA A CALL OUTH84 MVI A,4 ADD B STA OUTH84+1 MVI A,010H CALL OUTH84 MVI A,4 CALL PINX CPI 010H JZ H893 LXI H,MODE2 MOV A,M ORI MODE2B0 MOV M,A LHLD TTY11B LDA H11PT2 CALL IN2661 LHLD LPTBAUD LDA H84PT3 CALL IN8250 LDA H11PT3 CALL IN8255 JMP CBT1A H893: LXI H,MODE2 MOV A,M ANI 0FFH-MODE2B0 MOV M,A ENDIF LHLD TTYBAUD LDA H84PT2 CALL IN8250 LHLD LPTBAUD LDA H84PT3 CALL IN8250 LHLD RDPBAUD LDA H84PT4 CALL IN8250 CBT1A: LXI H,SMSG0 CALL PMSG LXI H,BIOSEND LXI D,255 DAD D MOV A,H RAR RAR ANI 03FH JNZ CBOOT1 MVI A,64 CBOOT1: CALL TYDN LXI H,SMSG1 CALL PMSG EI LDA BBDA STA CBIB LXI H,CBI1 PUSH H LDA LOGDSK MOV C,A LDA BBDF ANI DPETYPE IF H17T CPI DPEH17 JZ CBH17 ENDIF IF H37T CPI DPEH37 JZ CBH37 ENDIF IF H47T CPI DPEH47 JZ CBH47 ENDIF IF XEBT CPI DPEXEB JZ CBXEB ENDIF MVI C,BELL CALL CONOUT HLT CBI1: XRA A STA CBIA LDA CBIB XRI 7CH-78H STA CBIB LXI H,CBI2 PUSH H LDA BBDF ANI DPETYPE MVI C,0 IF H17T CPI DPEH17 JNZ CBH17 ENDIF IF H37T CPI DPEH37 JNZ CBH37 ENDIF IF H47T CPI DPEH47 JNZ CBH47 ENDIF IF XEBT CPI DPEXEB JNZ CBXEB ENDIF POP H CBI2: MVI A,32H ; 4 MHZ CONTROL INITIALIZATION WORD STA CTLPRT ; 2 MS CLOCK WILL UPDATE XRA A STA LOGDSK LXI H,BIOS SHLD BBIOS MVI A,BT$CD JMP GOW SMSG0: DB CR,LF,LF,0 SMSG1: DB 'K LLL/HEATH/ZENITH QUIKSTOR (C) CP/M 2.2' IF EXPER DB 'X' ENDIF IF NOT (EXPER) DB '.' ENDIF DB VERS/10+'0',(VERS MOD 10)+'0',LEVEL DB ' ',MONTH/10+'0',(MONTH MOD 10)+'0','/',DAY/10+'0' DB (DAY MOD 10)+'0','/',YEAR/10+'0',(YEAR MOD 10)+'0' DB CR,LF DB 'FOR' IF H17T DB ' H17' ENDIF IF H37T DB ' H37' ENDIF IF H47T DB ' H47' ENDIF IF XEBT DB ' SASI' ENDIF DB ' DISKS' WRKVARX EQU INTINP OR BRKKEY OR TOD OR EVENT WRKVAR EQU WRKVARX OR H37ED OR H47ED IF WRKVAR DB ' WITH OPTION(S) ' ENDIF IF (WRKVAR) ENDIF IF TOD AND (WRKVAR) DB 'T' ENDIF IF (WRKVAR) ENDIF IF EVENT AND (WRKVAR) DB 'E' ENDIF IF (WRKVAR) ENDIF IF INTINP AND (WRKVAR) DB 'I' ENDIF IF (WRKVAR) ENDIF IF BRKKEY AND (WRKVAR) DB 'B' ENDIF IF (WRKVAR) ENDIF IF H37ED AND (WRKVAR) DB 'E3' ENDIF IF (WRKVAR) ENDIF IF H47ED AND (WRKVAR) DB 'E4' ENDIF IF (WRKVAR) ENDIF IF SPD4M DB '2/4 MHZ' IF (WRKVAR) ENDIF DB CR,LF,0 CBIA: DB 1 CBIB: DS 1 CBIC: DB 0 IF H17T CBH17: MVI A,07CH STA H17PRT MVI B,H17ND MVI D,(DPE0-DPBASE)/DPEL CALL CBTFIL MVI A,DFMO STA DEVCTL LDA CBIA ANA A CZ RESH17 MVI B,H17ND MVI A,10 STA TRACK LXI H,DPE0+DPEHTH CBH171: PUSH B SHLD HSTDPB LXI D,DPEFLG2-DPEHTH DAD D MOV A,M ANI DPEIMG JNZ CBH171A CALL SDP IN DPDC ANI DFT0 JZ CBH171A CALL SDT CALL STZ CBH171A: LHLD HSTDPB LXI D,DPEL DAD D POP B DCR B JNZ CBH171 JMP XOK ENDIF IF H37T CBH37: MVI A,078H STA H37PRT MVI B,H37ND MVI D,(DPE37$0-DPBASE)/DPEL CALL CBTFIL DI MVI A,MI$JMP LXI H,H37ISR STA H37VEC SHLD H37VEC+1 EI MVI A,CONMO STA H37CTL LDA CBIA ANA A CZ RESH37 MVI B,H37ND MVI A,10 STA HSTTRK LXI H,DPE37$0+DPEHTH CBH371: PUSH B SHLD HSTDPB LXI D,DPEFLG2-DPEHTH DAD D MOV A,M ANI DPEIMG JNZ CBH371A CALL SDP37 MVI A,FD$CD OUT FD$INT IN FD$STA ANI FDSTK0 JZ CBH371A CALL SDT37 CALL RST37 CBH371A: LHLD HSTDPB LXI D,DPEL DAD D POP B DCR B JNZ CBH371 JMP H37DONE ENDIF IF H47T CBH47: MVI B,H47ND MVI D,(DPE47$0-DPBASE)/DPEL CALL CBTFIL LDA CBIB STA H47PRT STA H47INS1 STA H47OUTC1 INR A STA H47IND1 STA H47OUTD1 LDA CBIB CPI 7CH JNZ CBH472 MVI B,H47ND LXI D,DPEL LXI H,DPE47$0+DPEFLAG CBH471: MOV A,M ORI DPEP7C MOV M,A DAD D DCR B JNZ CBH471 CBH472: LDA CBIA ANA A CZ RESH47 RET ENDIF IF XEBT CBXEB: LDA CBIB CBXEB0: STA XEBPRT STA SADATI+1 STA SADATO+1 INR A STA SASTAI+1 STA SACTLO+1 INR A STA SASELO+1 MVI B,XEBND MVI D,(DPEXE$0-DPBASE)/DPEL CALL CBTFIL CBXEB1: LDA CBIA ANA A RZ LXI H,DPEXE$0+DPEHTH MOV A,M ORI DPEASGN MOV M,A INX H LDA BSEL MOV M,A LXI D,DPELPB-DPEHTH-1 DAD D XCHG LHLD BBP XCHG MOV M,E INX H MOV M,D INX H XCHG LHLD BUPB XCHG MOV M,E INX H MOV M,D XRA A RET ENDIF CBTFIL: LXI H,0 SHLD CBTIA CBTFIL1: PUSH B PUSH D LDA CBIA ANA A CNZ CBTF7 XRA A CALL CBTF0 POP D POP B LHLD CBTIA MOV A,H ORA L JNZ CBTFIL2 CALL CBTF7 JMP CBTFIL1 CBTFIL2: MVI A,1 CBTF0: STA CBTFA MOV E,B CBTF1: MOV A,C CMP B JC CBTF2 SUB B CBTF2: ADD D PUSH B MOV B,A LDA CBIC ADD A ADD A ADD A ADD A ADD B MOV B,A PUSH D CALL GETDPEX XCHG LXI H,DPEFLG2-DPEHTH DAD D MOV A,M ANI DPEIMG LDA CBTFA JNZ CBTF3 ANA A JNZ CBTF4 PUSH H LHLD CBTIA MOV A,H ORA L POP H JNZ CBTF2A XCHG SHLD CBTIA XCHG CBTF2A: INX H IF DPEFLG2+1-DPELUN %: (DPEFLG2+1) NE DPELUN ENDIF MOV M,B CALL CBTF6 JMP CBTF4 CBTF3: ANA A JZ CBTF4 PUSH H CALL CBTF6 LHLD CBTIA MVI C,DPEHL CALL MOVEIT POP H MOV A,M ORI DPEIMG MOV M,A CBTF4: POP D POP B INR C DCR E JNZ CBTF1 RET CBTF6: LDA CBIC LXI H,BDMAP CALL DADA MOV M,B LXI H,CBIC INR M RET CBTF7: PUSH B PUSH D MOV A,C ADD D CALL GETDPEX SHLD CBTIA LXI D,DPEFLG2-DPEHTH DAD D MOV A,M ANI 0FFH-DPEIMG MOV M,A POP D POP B RET CBTFA DS 1 CBTIA DS 2 TYDN: MVI C,0 TYDN1: SUI 10 JC TYDN2 INR C JMP TYDN1 TYDN2: ADI 10 PUSH PSW MOV A,C ADI 030H MOV C,A CALL CONOUT POP PSW ADI 030H MOV C,A JMP CONOUT IN8250: MOV B,A XCHG LXI H,OUTH84+1 MVI A,3 ADD B MOV C,A MOV M,A MVI A,83H CALL OUTH84 INR M MVI A,0FH CALL OUTH84 MOV M,B MOV A,E CALL OUTH84 MOV A,D ANI 0FH INR M CALL OUTH84 MOV M,C CPI B110 SHR 8 MVI A,3 JC IN821 ORI 4 IN821: CALL OUTH84 DCR M DCR M XRA A CALL OUTH84 XCHG DAD H DAD H DAD H DAD H LOOP1: DCX H MOV A,L ORA H JNZ LOOP1 RET OUTH84: OUT 0 RET IF BIOS04 IN2661: MOV B,A XCHG LXI H,OUTH84+1 ADI EPCMD CALL PIN MVI A,EPCMD ADD B MOV M,A XRA A CALL OUTH84 MVI A,EPMODE ADD B MOV M,A MOV A,E CPI EPB300 MVI A,EPSB1 JNC IN2661B MVI A,EPSB2 IN2661B: ORI EPCL8+EPA16X CALL OUTH84 MVI A,70H ORA E CALL OUTH84 MVI A,EPCMD ADD B MOV M,A MVI A,EPNORM+EPRTS+EPRESE+EPRXEN+EPDTR+EPTXEN CALL OUTH84 MVI A,EPDATA ADD B CALL PIN MVI A,EPDATA ADD B CALL PIN RET IN8255: MOV B,A LXI H,OUTH84+1 MVI A,PPCTL ADD B MOV M,A MVI A,PPMSF+PPGAM1+PPGAPC+PPGBPB CALL OUTH84 MVI A,PPDS CALL OUTH84 RET ENDIF CLEN EQU $-HSTBUF ;******************** ; ; IF COLD BOOT CODE IS SMALLER THAN HOST BUFFER, ; THEN FILL OUT 'HSTBUF' WITH DS STATEMENT. IF (CLEN-HSTSIZ) SHR 15 DS HSTSIZ-CLEN ; OTHERWISE REORG SO RUN-TIME VARIABLES CAN ALSO OVERLAY ; COLD BOOT CODE. ENDIF IF NOT ((CLEN-HSTSIZ) SHR 15) ORG HSTBUF+HSTSIZ ENDIF ; ;******************** DIRBUF: DS 128 IF H17T ALV0: DS 26 CSV0: DS 32 ALV1: DS 26 CSV1: DS 32 ALV2: DS 26 CSV2: DS 32 ENDIF IF H37T DPB37$0 DS DPBL ALV37$0 DS 50 CSV37$0 DS 64 DPB37$1 DS DPBL ALV37$1 DS 50 CSV37$1 DS 64 DPB37$2 DS DPBL ALV37$2 DS 50 CSV37$2 DS 64 ENDIF IF H47T ALV47$0 DS 77 CSV47$0 DS 64 ALV47$1 DS 77 CSV47$1 DS 64 ENDIF IF XEBT DPBXE$0 DS DPBL CSVXE$0 DS 0 ALVXE$0 DS 256 DPBXE$1 DS DPBL CSVXE$1 DS 0 ALVXE$1 DS 256 ENDIF IF XEBT AND NPART4 DPBXE$2 DS DPBL CSVXE$2 DS 0 ALVXE$2 DS 256 DPBXE$3 DS DPBL CSVXE$3 DS 0 ALVXE$3 DS 256 ENDIF IF (($-HSTBUF)-CLEN) SHR 15 ORG HSTBUF+CLEN ENDIF DPBX: DS 2 HSTDPB: DS 2 DMAB: DS 2 SPT: DS 1 XLTW: DS 2 SPT1: DS 1 XLTW1: DS 2 TRACK: DS 1 SECTOR: DS 1 SIDE: DS 1 RWOP DS 1 LSP: DS 1 ERRCNT: DS 1 ERRTYP: DS 1 TRKPT: DS 2 SEKDSK: DS 1 SEKTRK: DS 2 SEKSEC: DS 1 HSTDSK: DS 1 HSTTRK: DS 2 HSTSEC: DS 1 SEKHST: DS 1 UNADSK: DS 1 UNATRK: DS 2 UNASI: DS 1 ERFLAG: DS 1 RSFLAG: DS 1 READOP: DS 1 WRTYPE: DS 1 DMAADR: DS 2 HSAV: DS 2 RETSAV: DS 2 OLDSP: DS 2 IF INTINP CRTBUF: DS 40 CRTBND EQU $ CRTLEN EQU CRTBND-CRTBUF DS 16 LCLSTK EQU $ ENDIF ; Changed DS 32 to DB with 32 nulls to force fill of space like QS Distribution DB 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 DB 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 STACK DS 0 BIOSEND EQU $ END ,00,00,00,00,00,00,00,00,00,00,00,00,00 DB 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,