|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 15360 (0x3c00)
Types: TextFile
Names: »MINIBIOS.ASM«
└─⟦be0857eee⟧ Bits:30004395 CP/M-86 files - CR8 Dual floppy
└─⟦this⟧ »MINIBIOS.ASM«
TITLE 'MINI FLOPPY R/O BIOS FOR SYSTEM INSTALLATION DISK - NF/830629'
PAGE 43
$*MACRO
;***************************************************************************
;DEFINE TRUE AND FALSE ASSEMBLY PARAMETERS
;
TRUE EQU -1 ;DEFINE TRUE
FALSE EQU NOT TRUE ;DEFINE FALSE
;DEFINE MEMORY BASED I/O MODULE ENTRY POINTS
;
$-PRINT
;
MODBASE EQU 0F800H ;SET JUMP TABLE STARTING ADDRESS
;
INITSER EQU MODBASE+00 ;INITIALIZE MP-SQUARE HARDWARE
; ;(NO PARAMETERS)
SETCBAUD EQU MODBASE+03 ;SET CONSOLE I/O BAUD RATE FACTOR
; ;(HL) = COUNTER TIMER PARAMETER VALUE
SETLBAUD EQU MODBASE+06 ;SET LINE PRINTER I/O BAUD RATE FACTOR
; ;(HL) = COUNTER TIMER VALUE
SETLRMSK EQU MODBASE+09 ;SET LINE PRINTER SIO RECEIVER MASK VALUE
; ;(A) = LINE PRINTER SIO MASK BYTE
SETLRVAL EQU MODBASE+012 ;SET LINE PRINTER SIO RECEIVER POLL VALUE
; ;(A) = LINE PRINTER POLL VALUE
SETLTMSK EQU MODBASE+015 ;SET LINE PRINTER SIO TRANSMITTER MASK VALUE
; ;(A) = LINE PRINTER SIO MASK BYTE
SETLTVAL EQU MODBASE+018 ;SET LINE PRINTER SIO TRANSMITTER POLL VALUE
; ;(A) = LINE PRINTER SIO POLL VALUE BYTE
CONSTAT EQU MODBASE+021 ;GET CONSOLE STATUS
; ;RETURN (A)=00 FOR NOT READY INPUT
; ; (A)=FF FOR READY INPUT
CONIN EQU MODBASE+024 ;GO GET CONSOLE INPUT CHARACTER
; ;(A)=INPUT CONSOLE CHARACTER
CONOUT EQU MODBASE+027 ;PUT OUT CONSOLE CHAR
; ;(C)=CHARACTER TO OUTPUT
LPTSTAT EQU MODBASE+030 ;GET LINE PRINTER STATUS
; ;RETURN (A)=00 FOR NOT NEXT OUTPUT
; ; (A)=FF FOR READY OUTPUT
LPTIN EQU MODBASE+033 ;GO GET LINE PRINTER INPUT CHARACTER
; ;(A)=INPUT LPT SERIAL PORT CHARACTER
LPTOUT EQU MODBASE+036 ;PUT OUT LINE PRINTER CHARACTER
; ;(C)=LPT SERIAL OUTPUT CHARACTER
HUNIT EQU MODBASE+039 ;SELECT HARD DISK UNIT NUMBER
; ;(C)=UNIT NUMBER ON MSC 9205 CONTROLLER
HPLAT EQU MODBASE+042 ;SELECT HARD DISK PLATTER (HEAD) NUMBER
; ;(C)=HEAD SELECT NUMBER
HSURF EQU MODBASE+045 ;SELECT HARD DISK SURFACE(HEAD 2^2) NUMBER
; ;(C)=MSB OF HEAD NUMBER
HCYL EQU MODBASE+048 ;SELECT HARD DISK CYLINDER NUMBER
; ;(BC)=CYLINDER NUMBER
HREC EQU MODBASE+051 ;SELECT HARD DISK RECORD NUMBER
; ;(C)=RECORD NUMBER
HCNT EQU MODBASE+054 ;SELECT HARD DISK SECTOR COUNT
; ;(C)=RECORD COUNT
HBADDR EQU MODBASE+057 ;SET 9205 CONTROLLER DMA ADDRESS
; ;(BC)=16 BIT DATA BUFFER ADDRESS
HREST EQU MODBASE+060 ;RESTORE SELECTED HARD DISK UNIT
; ;(A) RETURNS ERROR CODE
HREAD EQU MODBASE+063 ;READ SELECTED SECTOR(S)
; ;(A) RETURNS ERROR CODE
HVERF EQU MODBASE+066 ;VERIFY SELECTED SECTOR(S)
; ;(A) RETURNS ERROR CODE
HWRIT EQU MODBASE+069 ;WRITE SELECTED SECTOR(S)
; ;(A) RETURNS ERROR CODE
HEXEC EQU MODBASE+072 ;EXECUTE SPECIAL COMMAND OF MSC 9205
; ;(C) ENTRY WITH MSC 9205 COMMAND
; ;(A) RETURNS ERROR CODE
HRESET EQU MODBASE+075 ;RESET HARD DISK CONTROLLER MSC 9205
; ;NO PARAMETERS
MUNIT EQU MODBASE+078 ;SELECT MINI FLOPPY UNIT NUMBER
; ;(C)=FLOPPY PHYSICAL UNIT NUMBER
MSURF EQU MODBASE+081 ;SELECT MINI FLOPPY SURFACE(HEAD) NUMBER
; ;(C)=FLOPPY SIDE NUMBER
MCYL EQU MODBASE+084 ;SELECT MINI FLOPPY CYLINDER(TRACK) NUMBER
; ;(C)=FLOPPY TRACK NUMBER
MREC EQU MODBASE+087 ;SELECT MINI FLOPPY RECORD NUMBER
; ;(C)=FLOPPY SECTOR NUMBER
MCNT EQU MODBASE+090 ;SELECT MINI FLOPPY PHYSICAL SECTOR COUNT
; ;(C)=MINI FLOPPY SECTOR COUNT
MSIZE EQU MODBASE+093 ;SELECT FLOPPY SECTOR SIZE (00)=256 BYTES
; ;(BC)=MINI FLOPPY TRACK NUMBER
MBADDR EQU MODBASE+096 ;SET FLOPPY DISK DATA BUFFER ADDRESS
; ;(BC)=FLOPPY BUFFER ADDRESS
MREST EQU MODBASE+099 ;RESTORE SELECTED MINI FLOPPY UNIT
; ;(A)=RETURNS ERROR STATUS
MVERF EQU MODBASE+102 ;VERIFY (READ) SELECTED SECTOR
; ;(A)=RETURNS STATUS
MWRIT EQU MODBASE+105 ;WRITE SELECTED SECTOR
; ;(A)=RETURNED STATUS
MREAD EQU MODBASE+108 ;READ SELECTED SECTOR
; ;(A)=RETURNED STATUS
MWTRK EQU MODBASE+111 ;WRITE SELECTED FLOPPY TRACK
; ;(A)=RETURNED STATUS
MMODE EQU MODBASE+114 ;SET FLOPPY OPERATION MODE
; ;(C)=STANDARD MODE DEFINITION
MINST EQU MODBASE+117 ;FETCH CURRENT INSTRUCTION CODE
; ;(A)=RETURNED INSTRUCTION PATTERN
MMOFF EQU MODBASE+120 ;CHECK MINI FLOPPY MOTOR ON COUNT
; ;OUT TIMER
;
MACLIB Z80
MACLIB DISKDEF
$+PRINT
;ASCII CHARACTER DEFINITIONS
;
BS EQU 008H ;ASCII BACK SPACE CHARACTER
LF EQU 00AH ;ASCII LINE FEED CHARACTER
CR EQU 00DH ;ASCII CARRIAGE RETURN CHARACTER
ESC EQU 01BH ;ASCII ESCAPE CHARACTER
RUBOUT EQU 07FH ;ASCII RUBOUT CHARACTER
;SECTOR DEBLOCKING ALGORITHMS
;
SMASK MACRO HBLK ;UTILITY MACRO TO COMPUTE SECTOR MASK
;
; COMPUTE LOG2(HBLK), RETURN @X AS RESULT
; (2 ** @X = HBLK ON RETURN)
;
@Y SET HBLK
@X SET 0
;
; COUNT RIGHT SHIFTS OF @Y UNTIL = 1
;
REPT 8
IF @Y = 1
EXITM
ENDIF
;
; @Y IS NOT 1, SHIFT RIGHT ONE POSITION
;
@Y SET @Y SHR 1
@X SET @X + 1
ENDM
ENDM
; HOST DISK CONSTANTS
;
HSTSIZ EQU 512 ;HOST DISK SECTOR SIZE
HSTBLK EQU HSTSIZ/128 ;CP/M SECTS/HOST BUFF
SECMSK EQU HSTBLK-1 ;SECTOR MASK
SMASK HSTBLK ;COMPUTE SECTOR MASK
SECSHF EQU @X ;LOG2(HSTBLK)
;HOST BUFFER DECLARATION
;PLACED IN THE AREA F600H-F7FFH SINCE THIS CANNOT BE LOADED FROM FLOPPY ANYWAY
;
HSTBUF EQU 0F600H ;HOST BUFFER
PAGE
;*******I/O JUMP VECTOR*******************************************************
;THIS IS WHERE XBDOS CALLS WHEN IT NEEDS TO DO ANY INPUT/OUTPUT OPERATION.
;
ORG 0E600H
JMP DUMRET ;FROM COLD START LOADER
JMP DUMRET ;FROM WARM BOOT
JMP CONSTAT ;CHECK CONSOLE KB STATUS
JMP CONIN ;READ CONSOLE CHARACTER
JMP CONOUT ;WRITE CONSOLE CHARACTER
JMP DUMRET ;WRITE LISTING CHAR
JMP DUMRET ;WRITE PUNCH CHAR
JMP DUMRET ;READ READER CHAR
JMP HOME ;MOVE DISK TO TRACK ZERO
JMP SELDSK ;SELECT DISK DRIVE
JMP SETTRK ;SEEK TO TRACK IN REG A
JMP SETSEC ;SET SECTOR NUMBER
JMP SETDMA ;SET DISK STARTING ADR
JMP READ ;READ SELECTED SECTOR
JMP DUMRET ;WRITE SELECTED
JMP DUMRET ;RETURN LIST STATUS
JMP SECTRAN ;SECTOR TRANSLATE
PAGE
;PARAMETER TABLE FOR ONE TANDON 5 1/4 DOUBLE DENSITY
;DOUBLE SIDED 96 TRACKS PER INCH MINI FLOPPY DRIVE
;
DISKS 1 ;ONE MINI DRIVE SUPPORTED
DISKDEF 0,1,32,,2048,304,128,128,2 ;A: MINI DRIVE
;SELECT UNIT NUMBER ACCORDING TO REGISTER C
;
; WHERE: 00 = MINI DRIVE 0 (DISK A:)
;;; 01 = MINI DRIVE 1 (DISK B:)
;
SELDSK: MOV A,C ;GET NEW UNIT NUMBER
LXI H,0 ;RETURN 0000 IN H&L REGS., IF ERROR
CPI 1 ;IS SELECT MORE THAN MAX TABLE ENTRY
RNC ;RETURN WITH ERROR, IF NOT VALID TABLE ENTRY
STA SEKDSK ;SET SEKDSK TO CP/M UNIT SELECT CODE
MOV L,C
MVI H,0
REPT 4 ;SHIFT LEFT 4 (*16)
DAD H
ENDM
LXI D,DPBASE ;D&E REGS. = DISK PARAMETER BASE
DAD D ;H&L REGS. = BIAS OFFSET INTO TABLE
XRA A ;SET A REG. = 00
DUMRET: RET ;RETURN FROM SELDSK (AND DUMY RETURN)
PAGE
;VALID DISK DRIVE SELECT TABLES
;
;TABLE ENTRIES CONTAIN VALUES FOR VARIOUS DISK CONFIGURATIONS
;AND ALLOW QUICK INDEXING TO THE DRIVE SELECT CODE PARAMETERS.
;EACH ENTRY CONSISTS OF:
; FIRST BYTE: LEGAL/ILLEGAL 0=ILLEGAL, 0FFH=LEGAL
; SECOND BYTE: PHYSICAL UNIT SELECT CODE 00 TO 03
; THIRD BYTE: MINI/HARD FLAG 0=HARD UNIT, 0FFH=MINI FLOPPY
; (NOT USED IN MINI ONLY BIOS)
; FOURTH BYTE: DISK PARAMETER TABLE INDEX (FROM DISKDEF)
;
DSTAB: DB 0FFH,000H,000H,000H ;MINI FLOPPY DISK UNIT 0
;SUBROUTINE TO GET THE PHYSICAL DRIVE NUMBER OUT OF THE DRIVE
;SELECT PARAMETER TABLE INTO (A)
;
GETDRNO:
LDA HSTDSK ;GET UNIT CP/M THINKS WE HAVE
ADD A
ADD A ;SETUP INDEX INTO FOUR BYTE TABLE ENTRIES
MOV C,A
MVI B,0
LXI H,DSTAB+1 ;BASE ADDRESS FOR ENTRIES OF PHYSICAL
;DRIVE ADDRESS TRANSLATION
DAD B
MOV C,M ;GET PHYSICAL NUMBER INTO (A)
RET
PAGE
;MOVE DISK TO TRACK ZERO
;
HOME: LDA HSTWRT ;CHECK FOR PENDING WRITE
ORA A
JRNZ HOMEIT
STA HSTACT ;CLEAR HOST ACTIVE FLAG
HOMEIT:
LXI H,0000H ;ITS LIKE WE ARE GOING TO TRACK 0
SHLD SEKTRK
LDA SEKDSK ;MUST TRANSFER SELECTED DISK TO "HSTDSK"
STA HSTDSK ;FOR THE FLOPPY RESTORE ROUTINE
CALL GETDRNO ;GET PHYSICAL DRIVE NUMBER
CALL MUNIT
CALL MREST ;GO RESTORE THAT MINI FLOPPY
ORA A
JRNZ HOMEERR
HOMEOK:
XRA A
STA ERFLAG ;RESET ERROR FLAG
RET ;RETURN FROM HOME, IF O.K.
HOMEERR:
CALL EREXIT ;PRINT BIOS ERROR MESSAGE
MVI A,01H ;SET ERROR FLAG
STA ERFLAG
RET
;SET TRACK NUMBER SPECIFIED BY B&C REGS.
;
SETTRK: MOV H,B
MOV L,C
SHLD SEKTRK ;TRACK TO SEEK
RET
PAGE
;TRANSLATE THE SECTOR GIVEN BY B&C REGS.
;
;NO TRANSLATE DONE AT THIS TIME. WE WILL TRANSLATE THE
;MINI FLOPPY AT THE PHYSICAL SECTOR BASIS IN THE MINI
;FLOPPY READ/WRITE SETUP ROUTINE.
;
SECTRAN:
MOV H,B
MOV L,C
RET ;RETURN FROM SECTRAN
;SET DISK SECTOR NUMBER
;
SETSEC: MOV A,C ;GET SECTOR NUMBER
STA SEKSEC ;SECTOR TO SEEK
RET ;RETURN FROM SETSEC
;SET DISK DMA ADDRESS
;
SETDMA: MOV H,B ;MOVE B&C TO H&L
MOV L,C
SHLD DMAADR ;PUT AT DMA ADR ADDRESS
RET ;RETURN FROM SETDMA
PAGE
;READ THE SELECTED CP/M 2.2 SECTOR
;
READ: XRA A ;CLEAR UNALLOCATED COUNT
STA UNACNT
STA ERFLAG ;NO ERRORS (YET)
LDA SEKSEC ;COMPUTE HOST SECTOR
REPT SECSHF
ORA A ;CARRY = 0
RAR ;SHIFT RIGHT
ENDM
;OUR DISK CONTROLLER NUMBERS ITS RECORDS FROM 1 AND NOT ZERO
;SO FIXUP THE "SEKHST" SECTOR NUMBER
;
INR A
STA SEKHST ;HOST SECTOR TO SEEK
;ACTIVE HOST SECTOR?
;
LXI H,HSTACT ;HOST ACTIVE FLAG
MOV A,M
MVI M,1 ;ALWAYS BECOMES 1
ORA A ;WAS IT ALREADY?
JRZ FILHST ;FILL HOST IF NOT
;HOST BUFFER ACTIVE, SAME AS SEEK BUFFER?
;
LDA SEKDSK
LXI H,HSTDSK ;SAME DISK?
CMP M ;SEKDSK = HSTDSK?
JRNZ NOMATCH
;SAME DISK, SAME TRACK?
;
LXI H,HSTTRK
CALL SEKTRKCMP ;SEKTRK = HSTTRK?
JRNZ NOMATCH
;SAME DISK, SAME TRACK, SAME BUFFER?
;
LDA SEKHST
LXI H,HSTSEC ;SEKHST = HSTSEC?
CMP M
JRZ MATCH ;SKIP IF MATCH
;PROPER DISK, BUT NOT CORRECT SECTOR
;
NOMATCH:
;MAY HAVE TO FILL THE HOST BUFFER
;
FILHST: LDA SEKDSK
STA HSTDSK
LHLD SEKTRK
SHLD HSTTRK
LDA SEKHST
STA HSTSEC
CALL READHST
XRA A ;0 TO A REG.
STA HSTWRT ;NO PENDING WRITE
LDA ERFLAG ;CHECK ERRORS ON PRE-READ
ORA A
RNZ ;BACK TO BDOS IF ERROR
PAGE
;COPY DATA TO OR FROM BUFFER
;
MATCH: LDA SEKSEC ;MASK BUFFER NUMBER
ANI SECMSK ;LEAST SIGNIF BITS
MOV L,A ;READY TO SHIFT
MVI H,0 ;DOUBLE COUNT
REPT 7 ;SHIFT LEFT 7
DAD H
ENDM
;HL HAS RELATIVE HOST BUFFER ADDRESS
;
LXI D,HSTBUF
DAD D ;HL = HOST ADDRESS
XCHG ;NOW IN DE
LHLD DMAADR ;GET/PUT CP/M DATA
;DE IS SOURCE, HL IS DESTINATION
;
XCHG ;SWITCH FOR 'LDIR'
LXI B,128 ;COUNT - -
LDIR ;MOVE DATA
LDA ERFLAG
RET ;DATA HAS BEEN MOVED FROM HOST BUFFER
;UTILITY SUBROUTINE FOR 16-BIT COMPARE
;
SEKTRKCMP: ;HL = .UNATRK OR .HSTTRK, COMPARE WITH SEKTRK
XCHG
LXI H,SEKTRK
LDAX D ;LOW BYTE COMPARE
CMP M ;SAME?
RNZ ;RETURN IF NOT
;LOW BYTES EQUAL, TEST HIGH FIRST
;
INX D
INX H
LDAX D
CMP M ;SETS FLAGS
RET
;*****************************************************************************
;PERFORM THE PHYSICAL READ FROM THE HOST DISK
;
READHST: ;FALL THROUGH TO 'READSEC'
;HSTDSK = HOST DISK NUMBER, HSTTRK = HOST TRACK NUMBER,
;HSTSEC = HOST SECT NUMBER. READ "HSTSIZ" BYTES
;INTO HSTBUF AND RETURN ERROR FLAG IN ERFLAG.
;
READSEC:
CALL MIOPB ;SETUP MINI FLOPPY IOPB
CALL MREAD ;GO READ THAT SECTOR
ORA A
JRNZ RDERR ;EXIT FOR READ ERROR
RDOK: XRA A
STA ERFLAG
RET
RDERR: CALL EREXIT ;PRINT BIOS ERROR MESSAGE
MVI A,01H ;SET ERROR FLAG
STA ERFLAG
RET
PAGE
;READ/WRITE BIOS ERROR PRINT ROUTINE
;WAITS FOR USER RESPONSE ON CONSOLE AFTER PRINTING MESSAGE
;AND THEN RETURNS TO THE CALLER
;
EREXIT: STA IOERR ;SAVE ERROR STATUS
LXI H,ERRMSF ;USE MINI FLOPPY ERROR MESSAGE
CALL PRTMSG
LDA IOERR ;PRINT ERROR CODE
PUSH PSW
RRC
RRC
RRC
RRC
CALL HEXOUT
POP PSW
CALL HEXOUT
LXI H,ERRMS2 ;PRINT REST OF MESSAGE
CALL PRTMSG
LDA HSTDSK ;PRINT CP/M DRIVE DESIGNATOR WITH ERROR
ADI 'A'
MOV C,A
CALL CONOUT
LXI H,ERRMS3 ;PRINT MESSAGE CLOSE
CALL PRTMSG
RET ;BACK TO CP/M
PAGE
;ERROR ROUTINE MESSAGES
;
ERRMSF: DB CR,LF,CR,LF,' *** MINI FLOPPY DISK I/O ERROR - CODE(',0
ERRMS2: DB ') - DRIVE ',0
ERRMS3: DB ': *** ',CR,LF,0
;SUBROUTINE TO SEND A HEX CHAR TO THE CONSOLE
;
HEXOUT: ANI 0FH ;LOW NIBBLE ONLY
CPI 0AH ;GREATER THAN 9?
JM HEX1
ADI 07H ;ADD OFFSET FOR A-F
HEX1: ADI 030H ;ADD IN ASCII OFFSET
MOV C,A ;PRINT RESULT
CALL CONOUT
RET
PAGE
;**************************************************************************
;MINI FLOPPY I/O PARAMETER BLOCK SET UP ROUTINE
;
MIOPB: CALL GETDRNO ;GET PHYSICAL DRIVE NUMBER FROM
CALL MUNIT ;..FROM DRIVE SELECT TABLE
LDA HSTTRK ;GET AND SET TRACK NUMBER
PUSH PSW
ANI 01H ;FIND OUT WHAT THE SIDE NUMBER IS
MOV C,A
CALL MSURF ;SET MINI HEAD NUMBER
POP PSW
ORA A
RAR ;DIVIDE TRACK BY 2
MOV C,A ;SEND PHYSICAL TRACK TO IOPB
CALL MCYL
LXI B,00H ;SET SIZE CODE TO 256 BYTES
CALL MSIZE
MVI C,02H ;SET SECTOR COUNT TO 2
CALL MCNT
LDA HSTSEC ;CONVERT SECTOR NUMBER TO PROPER SKEW
ORA A ;CONVERT TO PAIRED ODD BASED
RAL
DCR A
DCR A ;NOW ZERO BASED FOR INDEXING
MVI B,00H
MOV C,A ;DOUBLE BYTE INDEX WORD
LXI H,MFSTRAN ;TRANSLATE TABLE BASE ADDRESS
DAD B
MOV C,M
CALL MREC ;SET ACTUAL SECTOR TO START READ UPON
LXI B,HSTBUF ;SET FLOPPY BUFFER ADDRESS
CALL MBADDR
RET
PAGE
;MINI FLOPPY PHYSICAL SECTOR TRANSLATE TABLE
;
MFSTRAN:
DB 1,2,5,6,9,10,13,14,3,4,7,8,11,12,15,16
;NOTE THAT ONLY ODD SECTORS ALLOWED
;*************************************************************************
;PRINT THE MESSAGE AT H&L UNTIL A ZERO
;
PRTMSG: MOV A,M ;GET CHARACTER TO PRINT
ORA A ;SET FLAGS
RZ ;RETURN, IF END OF STRING FLAG
MOV C,A ;CHARACTER IN C REG., FOR CONSOLE OUTPUT
PUSH H ;SAVE OUT POINTER
CALL CONOUT ;PRINT CHARACTER, CONSOLE OUTPUT
POP H ;GET BACK MESSAGE POINTER
INX H ;BUMP MESSAGE POINTER
JR PRTMSG
PAGE
;****************************************************************************
;STORAGE AREA FOR VARIABLES BEGINS HERE...
;
;THE NEXT SEVERAL BYTES ARE INITIALIZED TO ZERO FOLLOWING BOOT LOAD
;SINCE THEY ARE DECLARED WITH 'DB'
;
IOERR: DB 0 ;DISK I/O ERROR TYPE
;HOST DISK BLOCKING/DE-BLOCKING DATA AREA
;
TEMPDSK:
DB 0 ;TEMPORARY STORAGE FOR LOGGED DISK
SEKDSK: DB 0 ;SEEK DISK NUMBER
SEKTRK: DB 0,0 ;SEEK TRACK NUMBER
SEKSEC: DB 0 ;SEEK SECTOR NUMBER
HSTDSK: DB 0 ;HOST DISK NUMBER
HSTTRK: DB 0,0 ;HOST TRACK NUMBER
HSTSEC: DB 0 ;HOST SECTOR NUMBER
SEKHST: DB 0 ;SEEK SHR SECSHF
HSTACT: DB 0 ;HOST ACTIVE FLAG
HSTWRT: DB 0
UNACNT: DB 0 ;UNALLOCATED RECORD COUNT
UNADSK: DB 0 ;LAST UNALLOCATED DISK
UNATRK: DB 0,0 ;LAST UNALLOCATED TRACK
UNASEC: DB 0 ;LAST UNALLOCATED SECTOR
ERFLAG: DB 0 ;ERROR REPORTING
DMAADR: DB 0,0 ;DISK DMA TRANSFER ADDRESS
PAGE
;*****************************************************************************
;SCRATCH RAM AREA FOR BDOS USE (ORIGINALLY LAYED OUT BY 'ENDEF')
;
DIRSIZ EQU 128
ALVSIZ EQU 38
CSVSIZ EQU 32
DIRBUF EQU $ ;DIRECTORY ACCESS BUFFER
ALV0 EQU DIRBUF+DIRSIZ
CSV0 EQU ALV0 +ALVSIZ
FORCE DB 0 ;FORCE END FOR HEX FILE
END
;
;...+++END OF FILE
«eof»